#iOS.
글
/ 총 19편Rules that make an App Store review submission safe to rerun
If the server accepts a review request but the response is lost, a rerun is rejected as a duplicate. How DailySudoku decides what a rerun should do.
Fixing the order of the UMP explainer and the ATT request on iOS
DailySudoku requested ATT from the app, while Google UMP could also request it after an explainer. How I found the ATT calls in the SDK and reordered them.
Keeping the export compliance answer in sync across two files and ASC
The encryption export answer lives in Info.plist, a submission declaration file, and App Store Connect. Fixing a false success and a blocking regression.
When parallel tests disturbed each other through global notifications
An ad banner test that passed locally in 0.02 seconds hit a 45-minute limit in CI. The cause was a global notification from another test, fixed by injection.
How a canceled Task still ran to the end in a review prompt
A review prompt scheduled 2 seconds after a win could still run after the screen was left. A cancel after Task.sleep returns does not come back as an error.
Turning Apple Pencil handwriting into Sudoku digits
Placing a handwritten digit in DailySudoku: splitting strokes into taps and ink, grouping them, building model input, and applying only trusted results.
Exposing 81 Sudoku cells to VoiceOver and TalkBack
The DailySudoku board is one view on screen, but assistive technology needs 81 cells. How iOS and Android expose each cell, and what is still unverified.
A contract for counting ad impressions the same way on three platforms
A finished load on iOS, an impression callback on Android, a DOM mount on the web: one name, three meanings. A contract that splits the stages of an ad.
Daily puzzle scores: which day they belong to and how they get lost
In a game started at 23:50 and finished at 00:05, the puzzle date, the submission time, and the leaderboard window can disagree. How far to guarantee delivery.
Why a daily puzzle ID needs a generator version
A daily board is made from the date. If the generator changes, one date can give two boards, and a date-only ID cannot tell them apart. Design and proposal.
Ordering ad providers by GeoIP region without the location permission
When ad providers differ by region, an app needs a broad region, not coordinates. Consent first, then a server-side region bucket decides the provider order.
Keeping and revoking a one-time remove-ads purchase on iOS and Android
A remove-ads purchase looks final, but reinstalls, pending payments, and refunds make the purchase result alone unreliable. Read current entitlements instead.
Rust shared core, part 4: delivering it to iOS as an XCFramework
Passing Rust tests does not mean an iOS app links. Bundle device and simulator static libraries into an XCFramework, ship it as a Swift package, and align CI.
Rust shared core, part 3: keep UniFFI generated code behind an adapter
UniFFI generates Swift and Kotlin calling code from Rust. What to expose and how far generated types spread is up to the app. An adapter keeps them contained.
Rust shared core, part 2: keep the API across the boundary coarse
Types that suit a Rust engine differ from types that are easy to use from Swift, Kotlin, and TypeScript. Expose coarse action-level functions under a contract.
Rust shared core, part 1: what to share and where to draw the line
Building for iOS, Android, and the web means writing the same rules three times. Narrow what Rust shares to rules that must give the same result, in 3 layers.
What to decide when registering fonts at runtime on iOS
Bundled fonts need only an Info.plist entry, but downloaded or packaged fonts may suit runtime registration. This covers names, a registry, and file lifetime.
What to look at before adopting a Swift package registry
Receiving Swift dependencies by registry ID changes the path they travel. Request order, configuration, mixed graphs, mirrors, authentication, and signing.
Five changes from WWDC26 for iOS developers
What Apple announced at WWDC26 for iOS developers: App Intents, where models run, Xcode 27, the screen, and subscriptions. Facts and my view are kept apart.