Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
9da3955
Clean up .gitignore and untrack xcuserdata
PullFrom Apr 22, 2026
052e7fc
Enable ARC and exclude CocosDenshion from ARC
PullFrom May 1, 2026
1582f9d
Migrate CardEngine, Classes, and main.m to ARC
PullFrom May 2, 2026
49b42af
Migrate codebase from MRC to ARC
PullFrom May 2, 2026
2a022b3
Replace missing CocosDenshion library with AVAudioPlayer wrapper
PullFrom May 2, 2026
13a8a0d
Remove obsolete CocosDenshion placeholder
PullFrom May 2, 2026
806a3dc
Update screenshot link in README.md
PullFrom May 2, 2026
6f8b55b
Fix remaining ARC and deprecated API issues to achieve clean build
PullFrom May 2, 2026
4d1c3fb
Modernize app startup: migrate to UIScene-based lifecycle
PullFrom May 2, 2026
80ff596
Fix info view tab switching and close behavior
PullFrom May 2, 2026
c0574da
Fix card animation memory ownership across UIView animation context
PullFrom May 2, 2026
8d3f319
Updated MARKETING_VERSION to 1.1.1
PullFrom May 2, 2026
c467c14
Fix rotation handling and initial layout for iOS 17
PullFrom May 3, 2026
ee7bd20
Decouple CETableView background rendering from orientation detection
PullFrom May 3, 2026
3e94b44
Replace UIAlertView with UIAlertController
PullFrom May 3, 2026
228041e
Replace deprecated openURL: with openURL:options:completionHandler:
PullFrom May 3, 2026
efebe65
Migrate UIView begin/commitAnimations to block-based API
PullFrom May 3, 2026
b6af1da
Flatten _aboutView and remove orphan view controller wrapper
PullFrom May 3, 2026
f3f5692
Position info panels off-screen before slide-in animation
PullFrom May 3, 2026
f5cd73a
Stabilize info panel notepad background during tab transitions
PullFrom May 3, 2026
1b664a7
Add modern App Icon via Asset Catalog
PullFrom May 3, 2026
adfec9f
Localize remaining hard-coded user-facing strings
PullFrom May 3, 2026
54d1d10
Promote scheme to shared scheme
PullFrom May 3, 2026
73edce8
Migrate Localizable.strings to Localizable.xcstrings
PullFrom May 3, 2026
61298b5
Extract XIB strings into String Catalog
PullFrom May 3, 2026
c17099b
Remove unwanted localizations
PullFrom May 3, 2026
bdcaa31
Switch to runtime localization, remove per-language XIBs, add German …
PullFrom May 3, 2026
46f2f81
Widen labels and buttons to accommodate longer translations
PullFrom May 3, 2026
3b16255
Make version and copyright in About panel dynamic
PullFrom May 3, 2026
d859b35
Fix Settings panel: refresh on open, default to Smart mode
PullFrom May 3, 2026
8ca3ebd
Migrate UIView begin/commitAnimations to block-based API in CEStackVi…
PullFrom May 4, 2026
39c57ce
Modernize Game Center integration
PullFrom May 4, 2026
cac232d
Clean up obsolete Auto Layout markup in en XIB
PullFrom May 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,25 @@
# macOS
.DS_Store

# Xcode user-specific files
xcuserdata/
*.xcuserstate
*.xcscmblueprint

# Build products
build/
DerivedData/

# Swift Package Manager
.swiftpm/
.build/
Package.resolved

# Build artifacts
*.hmap
*.ipa
*.dSYM.zip
*.dSYM

# CocoaPods (falls später benötigt)
Pods/
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 14 additions & 0 deletions Assets.xcassets/AppIcon.appiconset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"images" : [
{
"filename" : "AppIcon-1024.png",
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
6 changes: 6 additions & 0 deletions Assets.xcassets/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
18 changes: 5 additions & 13 deletions CardEngine/CECard.m
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ + (NSUInteger) indexWithRank: (CERank) rank andSuit: (CESuit) suit
NSUInteger index = 0;

// Param check.
require ((rank >= kCERankAce) && (rank <= kCERankKing), bail);
require ((suit >= kCESuitDiamonds) && (suit <= kCESuitClubs), bail);
__Require ((rank >= kCERankAce) && (rank <= kCERankKing), bail);
__Require ((suit >= kCESuitDiamonds) && (suit <= kCESuitClubs), bail);

// Compute index.
index = (suit * 13) + rank;
Expand All @@ -52,7 +52,7 @@ + (CERank) rankFromIndex: (NSUInteger) index
CERank rank = 0;

// Param check.
require ((index >= 1) && (index <= 52), bail);
__Require ((index >= 1) && (index <= 52), bail);

// Modulo 13.
rank = ((index - 1) % 13) + 1;
Expand All @@ -69,7 +69,7 @@ + (CESuit) suitFromIndex: (NSUInteger) index
CESuit suit = 0;

// Param check.
require ((index >= 1) && (index <= 52), bail);
__Require ((index >= 1) && (index <= 52), bail);

// Divide by 13.
suit = (index - 1) / 13;
Expand Down Expand Up @@ -187,7 +187,7 @@ - (id) initWithIndex: (NSUInteger) index

// Super.
myself = [super init];
require (myself, bail);
__Require (myself, bail);

// Assign instance variable.
if (index == 0)
Expand All @@ -203,14 +203,6 @@ - (id) initWithIndex: (NSUInteger) index
return myself;
}

// ------------------------------------------------------------------------------------------------------------- dealloc

- (void) dealloc
{
// Super.
[super dealloc];
}

// ---------------------------------------------------------------------------------------------------------------- suit

- (CESuit) suit
Expand Down
8 changes: 4 additions & 4 deletions CardEngine/CECardDealer.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@
BOOL _dealing;
BOOL _enableUndoGrouping;
NSTimer *_dealTimer;
id <CECardDealerDelegate> _delegate;
__weak id <CECardDealerDelegate> _delegate;
}

@property(nonatomic,retain,readonly) CEStackView *sourceStack;
@property(nonatomic,retain,readonly) CEStackView *destStack;
@property(nonatomic,strong,readonly) CEStackView *sourceStack;
@property(nonatomic,strong,readonly) CEStackView *destStack;
@property(nonatomic) NSTimeInterval dealDuration; // Default: 0.25 seconds.
@property(nonatomic) NSTimeInterval dealDelay; // Default: 0.20 seconds.
@property(nonatomic) BOOL enableUndoGrouping;
@property(nonatomic,assign) id <CECardDealerDelegate> delegate; // Optional delegate.
@property(nonatomic,weak) id <CECardDealerDelegate> delegate; // Optional delegate.
@property(nonatomic,readonly) BOOL dealing;

- (void) dealCardsFromStackView: (CEStackView *) source toStackView: (CEStackView *) dest count: (NSUInteger) count;
Expand Down
25 changes: 9 additions & 16 deletions CardEngine/CECardDealer.m
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ - (id) init

// Super.
myself = [super init];
require (myself, bail);
__Require (myself, bail);

// Initialize instance variables.
_duration = kDefaultDealAnimationDuration;
Expand All @@ -54,17 +54,10 @@ - (void) dealloc
// Finish any deal in progress.
if (_dealing)
[self quickComplete];

// Release instance var.
[_sourceStack release];
[_destStack release];


// Clean up timer.
if (_dealTimer)
[_dealTimer invalidate];

// Super.
[super dealloc];
}

// --------------------------------------------------------------------------------------------------------- dealOneCard
Expand All @@ -80,8 +73,8 @@ - (void) dealOneCard
if (_enableUndoGrouping)
[[CETableView sharedCardUndoManager] endUndoGrouping];
_count = 0;
[_sourceStack release];
[_destStack release];
_sourceStack = nil;
_destStack = nil;
_dealing = NO;
}
else
Expand Down Expand Up @@ -118,9 +111,9 @@ - (void) dealCardsFromStackView: (CEStackView *) source toStackView: (CEStackVie
if ([source.stack topCard] == nil)
return;

// Retain stacks.
_sourceStack = [source retain];
_destStack = [dest retain];
// Store stacks.
_sourceStack = source;
_destStack = dest;
_count = count;
_dealing = YES;

Expand Down Expand Up @@ -169,8 +162,8 @@ - (void) quickComplete
if (_enableUndoGrouping)
[[CETableView sharedCardUndoManager] endUndoGrouping];
_count = 0;
[_sourceStack release];
[_destStack release];
_sourceStack = nil;
_destStack = nil;
_dealing = NO;
}
}
Expand Down
6 changes: 3 additions & 3 deletions CardEngine/CECardView.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ enum
BOOL _hasShadow; // Shadow state.
}

@property(nonatomic,retain) CECard *card; // The card object backing the view. This is the card displayed.
@property(nonatomic,retain) UIColor *highlightColor; // Fill color when view is highlighted. Can be set to nil.
@property(nonatomic,retain) NSString *label; // Fill color when view is highlighted. Can be set to nil.
@property(nonatomic,strong) CECard *card; // The card object backing the view. This is the card displayed.
@property(nonatomic,strong) UIColor *highlightColor; // Fill color when view is highlighted. Can be set to nil.
@property(nonatomic,strong) NSString *label; // Fill color when view is highlighted. Can be set to nil.
@property(nonatomic) BOOL highlight; // During live drag, view may highlight when stack dragged into.
@property(nonatomic) BOOL hasShadow; // Whether to draw a shadow beneath card. Default is NO.

Expand Down
47 changes: 16 additions & 31 deletions CardEngine/CECardView.m
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ - (id) initWithFrame: (CGRect) frame

// Super.
myself = [super initWithFrame: frame];
require (myself, bail);
__Require (myself, bail);

// Initialize instance variables.
_card = nil;
Expand All @@ -104,18 +104,6 @@ - (id) initWithFrame: (CGRect) frame
return self;
}

// ------------------------------------------------------------------------------------------------------------- dealloc

- (void) dealloc
{
// Release instance var.
[_card release];
[_highlightColor release];

// Super.
[super dealloc];
}

// ------------------------------------------------------------------------------------------------------------ isOpaque

- (BOOL) isOpaque
Expand All @@ -132,9 +120,8 @@ - (void) setCard: (CECard *) card
if (_card == card)
return;

// Release, retain, redraw.
[_card release];
_card = [card retain];
// Assign, redraw.
_card = card;

[self setNeedsDisplay];
}
Expand All @@ -155,9 +142,8 @@ - (void) setLabel: (NSString *) label
if (label == _label)
return;

// Release, retain, assign.
[_label release];
_label = [label retain];
// Assign.
_label = label;

// Redraw.
[self setNeedsDisplay];
Expand Down Expand Up @@ -272,9 +258,8 @@ - (void) drawRect: (CGRect) rect
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.lineBreakMode = NSLineBreakByWordWrapping;
style.alignment = NSTextAlignmentCenter;
[_label drawInRect: box withAttributes: [NSDictionary dictionaryWithObjectsAndKeys: font, NSFontAttributeName,
[_label drawInRect: box withAttributes: [NSDictionary dictionaryWithObjectsAndKeys: font, NSFontAttributeName,
style, NSParagraphStyleAttributeName, nil]];
[style release];
}
}

Expand Down Expand Up @@ -305,25 +290,25 @@ - (void) drawCardFace

// Get image URL from bundle.
bundle = CFBundleGetMainBundle ();
require (bundle, bail);
__Require (bundle, bail);

base = CFBundleCopyResourcesDirectoryURL (bundle);
require (base, bail);
__Require (base, bail);

url = CFURLCreateWithFileSystemPathRelativeToBase (kCFAllocatorDefault, CFSTR ("Cards.pdf"),
kCFURLPOSIXPathStyle, false, base);
require (url, bail);
__Require (url, bail);

// Get PDF document.
gCardPDFDocument = CGPDFDocumentCreateWithURL (url);
}

// Must have a PDF document by now.
require (gCardPDFDocument, bail);
__Require (gCardPDFDocument, bail);

// Get the page of the PDF that corresponds to our card index.
cardPage = CGPDFDocumentGetPage (gCardPDFDocument, [_card index]);
require (cardPage, bail);
__Require (cardPage, bail);

transform = CGPDFPageGetDrawingTransform (cardPage, kCGPDFCropBox, bounds, 0, true);

Expand Down Expand Up @@ -372,25 +357,25 @@ - (void) drawCardBack

// Get image URL from bundle.
bundle = CFBundleGetMainBundle ();
require (bundle, bail);
__Require (bundle, bail);

base = CFBundleCopyResourcesDirectoryURL (bundle);
require (base, bail);
__Require (base, bail);

url = CFURLCreateWithFileSystemPathRelativeToBase (kCFAllocatorDefault, CFSTR ("Cards.pdf"),
kCFURLPOSIXPathStyle, false, base);
require (url, bail);
__Require (url, bail);

// Get PDF document.
gCardPDFDocument = CGPDFDocumentCreateWithURL (url);
}

// Must have a PDF document by now.
require (gCardPDFDocument, bail);
__Require (gCardPDFDocument, bail);

// Get the page of the PDF that corresponds to our card index.
cardPage = CGPDFDocumentGetPage (gCardPDFDocument, 53);
require (cardPage, bail);
__Require (cardPage, bail);

transform = CGPDFPageGetDrawingTransform (cardPage, kCGPDFCropBox, bounds, 0, true);

Expand Down
Loading