Companies blueprint · Consumer technology / Mobile platforms
Apple: App Store to iPhone, and how Apple ships
Traces an iOS app from Xcode build and code signing through App Store Connect, TestFlight, App Review and CDN delivery to an iPhone, plus in-app purchases, updates and iCloud sync, alongside Apple's publicly described annual release and privacy-review practices. It must never deliver an unsigned or tampered binary, grant an unverified purchase, or expose user data beyond what the user consented to.
- Steps
- 9
- Subjective questions
- 33
- Objective questions
- 33
The problem and the outcome
Problem: Millions of third-party apps must reach a very large iPhone base safely, with verified code, honest privacy disclosures and reliable payments, while the OS underneath changes every year.
Outcome: Developers get one repeatable path from build to beta to release with clear review gates, and users get signed, size-optimised installs, trusted purchases and data that syncs across devices with privacy controls.
Architecture
How it works, step by step
- Build and sign: the developer builds in Xcode (locally or with Xcode Cloud) against the current SDK; the binary is signed with an Apple-issued certificate and provisioning profile, so the device can verify who made it and that it was not altered.
- Upload: the signed archive goes to App Store Connect with metadata, screenshots, age rating, privacy nutrition labels and the required privacy manifest; automated checks flag missing entitlements or disallowed API usage.
- Beta: TestFlight distributes the build to internal testers immediately and to external testers after a beta review, returning crash logs and feedback to the developer.
- App Review: the release candidate is checked against the publicly published App Review Guidelines for safety, performance, business rules, design and legal or privacy issues; rejections come back with guideline references and can be appealed.
- Publish: an approved version is released manually, automatically or on a date, and the App Store catalog updates the listing, search index and regional availability.
- Download: the user taps Get, the App Store app authenticates the Apple Account, and the CDN serves a device-specific thinned build; iOS verifies the signature before install.
- Purchase: in-app purchases and subscriptions go through StoreKit, which returns cryptographically signed transactions; the app's server should verify them and listen to App Store Server Notifications for renewals and refunds.
- Update and sync: new versions reach devices through automatic updates, optionally as a phased release that can be paused; app data syncs across the user's devices through iCloud and CloudKit, with end-to-end encryption for more categories when Advanced Data Protection is on.
- How Apple ships: Apple publicly announces each year's OS at WWDC in June, ships developer betas and a public beta over the summer, and releases in the autumn alongside new iPhones; its publicly described functional organisation and privacy-by-design reviews shape features before they reach this pipeline.
Tech stack
- Xcode, Swift and SwiftUI with Xcode Cloud for CI
- App Store Connect and its REST API
- TestFlight for beta distribution
- StoreKit 2 and App Store Server API / Server Notifications
- Apple Push Notification service (APNs)
- iCloud, CloudKit and Advanced Data Protection
- Code signing certificates, provisioning profiles and entitlements
- Privacy manifests and App Store privacy nutrition labels
Key design decisions
- Mandatory code signing plus OS-level signature checks make the device, not the network, the final gate against tampered binaries.
- Human-plus-automated App Review trades release speed for a more consistent safety and privacy baseline; expedited review and appeals exist as relief valves.
- App thinning and a global CDN send each device only the slices it needs, reducing download size and install time.
- StoreKit issues signed transactions so developers can verify purchases on their own servers instead of trusting the client.
- A fixed annual OS train announced at WWDC gives developers a predictable summer of betas to adopt new APIs before public release.
Common mistakes
- Letting certificates or provisioning profiles expire, which breaks builds or enterprise and TestFlight installs unexpectedly.
- Unlocking paid content from client-side purchase state without verifying signed transactions or handling refunds and renewals from server notifications.
- Privacy labels or privacy manifest that do not match what the app and its third-party SDKs actually collect, leading to rejection or loss of user trust.
- Shipping to everyone at once instead of using phased release, so a crash-on-launch bug hits the whole user base before it can be paused.
- Waiting until the autumn OS release to test, rather than using summer developer betas, and shipping broken on launch day.
What to measure
- Crash-free sessions and launch crashes per version, from Xcode Organizer and TestFlight
- Review turnaround time and rejection reasons by guideline
- Download and update completion rate and app size per device variant
- Purchase verification failures, refund rate and subscription renewal rate
- Adoption of the new OS version by your users after the autumn release
Most-asked interview questions
Subjective questions 33
1Walk me through how an app gets from a developer's Mac onto a user's iPhone.Asked almost every time
The developer builds in Xcode and signs the binary with an Apple-issued certificate and provisioning profile. They upload it to App Store Connect with metadata, privacy labels and a privacy manifest. TestFlight distributes it to internal testers, and to external testers after a beta review. The release then goes through App Review against the published guidelines. Once approved, it is published to the catalog and the binaries are pushed to a CDN. When a user taps Get, the App Store app authenticates them, downloads a thinned build for that exact device, and iOS verifies the signature before installing. Later updates follow the same path and can roll out in phases. I would highlight that trust is enforced at each layer: signing, review, and on-device verification.
2Explain how certificates, provisioning profiles and entitlements work together when signing an iOS app.Asked almost every time
Signing ties three things to the binary. The certificate proves identity: the developer's private key signs the code, and Apple's CA vouches for the public key. The provisioning profile, which Apple itself signs, binds an App ID, the allowed certificates and, for development or ad hoc builds, specific device IDs. Entitlements declare capabilities such as iCloud, push notifications or App Groups. They must match what the profile permits, or the OS refuses them. At install and launch, iOS checks the signature chain, the code hashes and the entitlements. For App Store builds, Apple re-signs the binary after review, so devices trust Apple's distribution signature. In interviews I add that private keys should live in a keychain or a managed signing service, never in a repository.
3How would you model entitlements on your own server for StoreKit subscriptions?Asked almost every time
I key everything on originalTransactionId, which stays stable across renewals, upgrades within a subscription group, and restores. A transactions table stores each verified JWS transaction, keyed by transactionId, with its product, purchase and expiry dates, environment, revocation date and the appAccountToken. An entitlements table maps user to originalTransactionId and holds the derived state: active, in grace period, in billing retry, expired or revoked, plus the expiry time. The appAccountToken, a UUID the app sets at purchase, links the purchase to our account ID. Entitlement state is only ever derived from verified Apple data, whether that comes from the client upload, server notifications or the App Store Server API. It is never derived from a client saying 'I paid'. Updates are idempotent and ordered by signedDate.
4App Store Server Notifications can be delayed, duplicated or arrive out of order. How do you handle that?Asked almost every time
First, verify every signedPayload's JWS chain back to Apple's root, and reject anything that fails. Next, deduplicate on notificationUUID and acknowledge quickly with HTTP 200, before doing heavy processing asynchronously through a queue. Apple retries failed deliveries for a limited period. For ordering, I don't apply notifications as blind state transitions. Instead, I treat each one as a trigger to refresh state, or I compare signedDate and the transaction's dates against what is stored and keep the newest. For gaps, a periodic job calls the Get Notification History endpoint to backfill missed events. For important users, I call Get All Subscription Statuses to reconcile. Alerts fire on verification failures and backlog growth. Entitlements fail safe: a missing notification must never grant access that Apple's data doesn't support.
5How would you design server-side verification for in-app subscriptions?Very often asked
I would never trust the client's word that a purchase happened. With StoreKit 2, each transaction comes as a signed JWS, so the app sends it to my backend, which verifies the signature and certificate chain, checks bundle ID and environment, and records the original transaction ID as the stable key for the subscription. Entitlements live on my server. I would subscribe to App Store Server Notifications version 2 to handle renewals, billing retries, grace periods, refunds and revocations, and use the App Store Server API to reconcile state if a notification is missed. Processing must be idempotent because notifications can be retried. Finally, I would test with sandbox and StoreKit testing in Xcode before release.
6What can engineering teams learn from how Apple plans and ships its yearly OS releases?Very often asked
Publicly, Apple runs a predictable annual train: announce at WWDC in June, ship developer betas and a public beta through the summer, then release in the autumn alongside new hardware. The lesson is that a fixed date forces scope decisions; features that are not ready move to a later release rather than delaying everyone. Apple has also publicly described a functional organisation where experts own their area across products, which helps hardware and software decisions stay consistent. Privacy is treated as a design requirement, reviewed early rather than patched later. For my own team, I would borrow the fixed cadence, early external betas for partners, clear single owners for each area, and privacy reviews at design time, not at launch.
7What is the privacy manifest, and what are required-reason APIs?Very often asked
The privacy manifest is a PrivacyInfo.xcprivacy file inside the app and inside each bundled SDK. It declares the data types collected, whether that data is used for tracking, any tracking domains, and the reasons for using certain APIs. Apple maintains a list of required-reason APIs, such as file timestamps, system boot time, disk space and UserDefaults. These APIs can be misused for fingerprinting, so each use must cite an approved reason code. Since 2024, App Store Connect flags uploads that use these APIs without declared reasons. Commonly used third-party SDKs must also ship their own manifests and signatures. Xcode can aggregate all the manifests into a privacy report, which helps developers fill in the App Store privacy nutrition labels accurately.
8How do you keep App Store privacy nutrition labels accurate when your app includes many third-party SDKs?Very often asked
I treat the labels as a build artefact, not marketing copy. First, I keep an inventory of every SDK, its version and its privacy manifest. Then I generate Xcode's privacy report on each release build and compare it with the declared labels, failing CI when something new appears. Any new SDK or new data field goes through a lightweight privacy review covering what is collected, why, whether it is linked to the user, and whether it counts as tracking under App Tracking Transparency. SDKs go through a server-side proxy where possible, so outbound traffic can be audited. A person on the product or legal side owns the labels, and they are reviewed whenever a version adds or removes data collection. Inaccurate labels risk rejection and erode user trust.
9How would you structure a beta programme using TestFlight internal and external testers?Very often asked
I would run it in rings. Internal testers are App Store Connect team members, up to 100 people, and they get every build within minutes of processing, with no review. That ring catches obvious breakage. External testers can number up to 10,000, invited by email or a public link. The first build of a version needs Beta App Review, so I submit early and push later builds once that review passes. I split external testers into groups, for example staff and friends first, then power users, then a broad public link, and I gate features with remote flags. Crash logs, screenshot feedback and the tester-count metrics feed triage. Builds expire after 90 days, so long-running betas need regular refreshes.
10Your release is rejected by App Review two days before a marketing launch. What do you do?Very often asked
First, I read the rejection carefully. It cites specific guideline numbers, and often the reviewer's notes or screenshots show exactly what failed. If it is a misunderstanding, such as a missing demo account or a feature the reviewer could not reach, I reply through the Resolution Centre with clear steps and credentials. If it is a real issue, I fix the smallest possible scope, resubmit, and consider requesting an expedited review, which Apple grants at its discretion. If we genuinely disagree, we can appeal to the App Review Board, but that takes time. In parallel, I tell marketing about the risk. Next time, I would submit well ahead of the date and use scheduled release, so approval and launch are decoupled.
11Design a CI/CD pipeline for an iOS app from pull request to App Store submission.Very often asked
On each pull request, Xcode Cloud or another macOS CI runner builds the app, runs unit and UI tests on several simulators, lints, and checks the privacy manifest. On merge to main, it archives a release build with an auto-incremented build number. It signs using cloud-managed certificates or keys held in a secure store, uploads to App Store Connect, and distributes to internal TestFlight testers. A release branch then promotes a chosen build to external groups. After sign-off, the pipeline submits that same build for review through the App Store Connect API, together with versioned metadata and screenshots. I keep signing secrets out of the repository, keep builds reproducible with pinned Xcode versions, and upload dSYMs for crash symbolication. Release uses phased rollout, with dashboards watching crash-free sessions.
12How would you design download delivery so a hugely popular game update does not overwhelm the infrastructure on release day?Very often asked
Use a multi-tier CDN. Edge caches sit close to users, regional mid-tier caches shield the origin, and the origin is object storage holding immutable, content-addressed artefacts. Before the release goes live, I pre-position the new variants at the edges, so the first million requests do not all miss the cache. Request coalescing ensures that concurrent misses for the same object produce a single origin fetch. Clients download in ranged chunks and can resume, with integrity checked per chunk and the signature verified at install. Rollout pacing helps too, through phased release and the OS scheduling automatic updates opportunistically, often overnight on Wi-Fi and power. Monitoring covers edge hit ratio, origin egress and error rates per region, with spare capacity or traffic shifting between providers for a regional incident.
13How should an app and its backend react when Apple refunds an in-app purchase?Very often asked
Apple sends a REFUND notification, and the transaction gains a revocationDate and revocationReason. On device, StoreKit 2's Transaction.updates delivers the revoked transaction, and currentEntitlements stops including it. On the server, I mark the transaction revoked and recompute the entitlement. For a subscription, access ends. For a consumable such as in-game currency, I deduct the balance, possibly into negative, according to the published policy. Apple may also send a CONSUMPTION_REQUEST notification asking for consumption data before deciding a refund. That data should be sent only with the user's consent, as Apple's guidelines require. I log refunds per user to spot abuse patterns, but I never punish without evidence. All of this is idempotent, so a replayed notification doesn't double-deduct.
14On day two of a phased release, your crash rate on the new version spikes. Walk me through your response.Very often asked
First, I pause the phased release in App Store Connect, which stops new automatic updates to the new version. I also remember its limits. Users can still update manually, new installs get the latest version, and you cannot roll a user back to an older binary. Next, I disable the offending feature with a remote flag if it is flag-gated, which is why risky code should ship behind flags. I triage with Xcode Organizer crash reports, MetricKit and our crash SDK, using dSYMs to find the failure. Then I ship a fix as a new build and request expedited review, explaining the user impact. Once it is approved, I release it, possibly at full speed. Afterwards, we hold a blameless postmortem covering why beta rings missed it.
15How do you keep old app versions working with your backend, and when would you force an update?Very often asked
Users update at their own pace, and some disable automatic updates, so the backend must serve many versions at once. I version APIs and make changes additive: new fields are optional and old fields are deprecated slowly. I also test old clients against new servers in CI. Every request carries the app version and build, so you can measure the population per version and decide when a version can be retired. Remote configuration lets the server switch features per version. Forcing an update is a last resort, for security fixes, breaking payment or legal changes, or a version that corrupts data. It is implemented as a server-driven blocking screen linking to the App Store, plus a softer nag for merely outdated versions. Note that a forced update cannot exceed device OS support.
16How would you design iCloud sync for an app's data with CloudKit, including conflict handling?Very often asked
I would store user data in the private database in a custom record zone, so I get atomic batch saves and change tracking. Each device fetches changes incrementally using a server change token persisted locally, and CloudKit subscriptions send silent pushes when something changes. Writes go first to a local store, which keeps the app offline-first, and an outbox pushes them to CloudKit. Conflicts surface as a serverRecordChanged error, which carries both the server record and the client record. I then merge, either field by field, by last-writer-wins on a modification timestamp, or with domain rules such as unioning set items. I treat deletions as tombstones. NSPersistentCloudKitContainer or SwiftData can handle much of this for Core Data-style models, with less control.
17What are the trade-offs of Advanced Data Protection for users and for app developers?Very often asked
Advanced Data Protection extends iCloud end-to-end encryption to many more categories, including iCloud Backup, Photos and Notes, so Apple no longer holds the keys for that data. The benefit is that a breach of Apple's servers, or a legal demand, exposes much less. The cost falls on recovery. Apple cannot help, so the user must set up a recovery contact or recovery key, and losing both means losing the data. Some web access and server-side features are limited by default. For developers, CloudKit fields set through encryptedValues are end-to-end encrypted, so the server cannot index or query them. Your data model must keep queryable fields non-sensitive and push sensitive processing onto the device.
18Threat-model the build pipeline: how could a tampered binary reach users, and what stops it?Very often asked
I see three risks. A compromised developer machine or CI could inject code before signing. Signing keys could be stolen. A dependency could be poisoned. Apple's controls cover distribution: App Store builds pass automated scanning and review, Apple re-signs them, and iOS verifies signatures at install and launch, so in-transit or on-device tampering fails. Code that the developer legitimately signed but that was poisoned upstream is the developer's responsibility. Mitigations include pinned and checksummed dependencies through Swift Package Manager lockfiles, keys kept in managed cloud signing or a hardware-backed keychain, least-privilege API keys for App Store Connect, protected release branches with review, and reproducible builds from clean CI images. If a certificate leaks, revoke it immediately and rotate. App Store builds remain safe because of Apple's re-signing.
19How does App Tracking Transparency affect app design and data flows?Very often asked
Since iOS 14.5, apps must ask permission through ATTrackingManager before tracking users across other companies' apps and websites, which includes accessing the IDFA. If the user declines, the IDFA is zeroed, and you must not track by other means such as fingerprinting, which App Review and the privacy manifest rules target. Practically, I design so the app works fully without consent. I show the prompt in context, not at first launch, with an honest purpose string. I use SKAdNetwork or AdAttributionKit for privacy-preserving install attribution. Consent state is recorded and respected by every SDK. The privacy labels and the manifest's tracking domains must reflect this, or Apple can block network requests to undeclared tracking domains.
20How should an app team prepare for Apple's annual iOS release cycle?Very often asked
I would plan the year around it. In June, after WWDC, engineers watch the relevant sessions and install the developer betas on test devices. They run the current App Store build on the new OS early, because behaviour changes show up there first, and they file Feedback Assistant reports with minimal reproductions. Through summer, we build adoption work for new APIs behind availability checks while continuing to ship on the current SDK. When the release candidate and final Xcode arrive, we ship a version built with the new SDK, ideally on release day. We also track Apple's announced minimum-SDK deadlines for submissions, and drop support for old OS versions based on our usage analytics, not on guesswork.
21How would you run a privacy-by-design review for a new feature in your own team?Very often asked
I would make it a required gate early in design, not a launch checklist. The template asks what data the feature needs and why, whether it can work on-device, and whether data can be minimised, aggregated or made ephemeral. It also covers who can access the data, retention, encryption at rest and in transit, consent and transparency in the UI, and any third parties involved. These echo Apple's public principles: data minimisation, on-device processing, transparency and control, and security. A trained reviewer outside the team signs off, and the decisions are written down. The outputs feed directly into the privacy manifest, the nutrition labels and the data inventory. The review is re-triggered whenever data use changes.
22Why does Apple re-sign apps distributed through the App Store instead of shipping the developer's signature unchanged?Often asked
Re-signing makes Apple the final authority on what runs from the App Store. After review, Apple applies its own distribution signature and FairPlay encryption to the exact binary it approved. A developer's leaked distribution certificate therefore cannot be used to push a different binary to App Store users, because devices only accept App Store installs carrying Apple's signature. It also enables per-device thinning and protects against piracy. The trade-off is that developers give up some control over the final artefact. That is why symbol files must be uploaded, or generated by Xcode, so crash reports can be symbolicated against Apple's processed build. Development, ad hoc and enterprise builds keep the developer's or organisation's signature because they skip review.
23What is app thinning, and how does it change what the CDN serves?Often asked
App thinning means a device downloads only what it needs. Slicing is the main part. From a single upload, the App Store produces variants for different device classes, keeping only the right architecture, image scales and Metal or GPU assets. This works best when resources are in asset catalogues. On-demand resources let the app fetch tagged content later, such as game levels, and the system can purge it when storage is low. Bitcode recompilation was removed in Xcode 14. For delivery, the CDN caches many variants per version instead of one universal file. Cache keys include the variant, and the client requests the variant matching its device traits. That raises origin storage but sharply cuts bytes transferred per install.
24Sketch a data model for the App Store catalogue: apps, versions, builds and regional availability.Often asked
I would use these entities. An App has a stable app ID and bundle ID, and belongs to a developer account. An AppVersion has a marketing version string, a state (preparing, in review, approved, released) and release settings. A Build carries the build number, SDK, minimum OS, its signed artefact references and per-device variant manifests. It links to one version once that version is submitted. A Localization holds the name, subtitle, description, keywords and screenshots per locale. TerritoryAvailability maps an app to countries and pricing tiers. AgeRating, PrivacyLabel and InAppProduct records hang off the app or version. Reads vastly outnumber writes, so the editorial source of truth is denormalised into per-storefront read models and a search index, updated by events when a version's state changes.
25When an approved version is released, the listing, search index and regional storefronts don't all update at the same instant. How do you manage that consistency?Often asked
I accept eventual consistency, but I control which inconsistencies can happen. The release is one authoritative state change in the catalogue database. That change emits an event carrying a version number, and every downstream projection consumes the event idempotently: storefront pages, search, CDN manifests and update feeds. The key invariant is that no projection may advertise a build whose artefacts are not already present and verifiable at the CDN. So artefacts are published first, and pointers move after. Each projection keeps the highest version it has seen and ignores older events. Clients may briefly see the old listing, which is harmless. A reconciliation job compares projections with the source of truth and repairs any lag, and lag is monitored per region.
26How would you handle failed subscription renewals, billing retry and grace periods?Often asked
When a renewal charge fails, Apple enters billing retry and keeps trying to collect for a period. You receive DID_FAIL_TO_RENEW, and the renewal info shows the retry state. If the developer has enabled Billing Grace Period in App Store Connect, the user keeps access for a configured window while Apple retries. The server tracks this as in grace with gracePeriodExpiresDate, and access continues until that date. Without grace, access ends at expiry, but I would still show a gentle 'update payment method' prompt. Apple also offers a system sheet for billing problems. If Apple recovers the payment, a DID_RENEW notification restores the active state seamlessly. If retry ends without payment, the subscription expires. Metrics on involuntary churn tell you whether grace is worth enabling.
27How does an app check entitlements offline, and how far should it trust the device?Often asked
StoreKit 2 keeps signed transactions on the device. Transaction.currentEntitlements returns the active ones, already verified by StoreKit, and VerificationResult lets the app reject anything unverified. So the app can unlock content offline and survive reinstalls. It should also listen to Transaction.updates for renewals and revocations, and call finish() once content has been delivered. For purely local features, that is usually enough. For anything of server-side value, such as cloud features, currency or premium API calls, the device is a hint, not the authority. The backend verifies the JWS itself or queries the App Store Server API, and enforces entitlement at the API layer. Jailbroken devices can tamper with the app's logic, which is why authorisation belongs on the server.
28Estimate the load on your App Store Server Notifications endpoint for a subscription app.Often asked
I state assumptions instead of quoting any Apple figures. Say we have 2 million subscribers, mostly monthly. Renewals alone come to roughly 2 million a month, or about 67,000 a day, which averages under one per second. Renewal timing is uneven, though, so I would plan for peaks many times the average. Add notifications for new subscriptions, failures, refunds, offers and plan changes, perhaps doubling the volume. Payloads are a few kilobytes each, so bandwidth is trivial. The real costs are JWS verification, database writes and downstream fan-out to analytics and CRM. Design for bursts: a stateless verifier behind a load balancer, quick acknowledgement, a durable queue, and idempotent workers. The hard problem is correctness and recovery, not throughput.
29How do you evolve a CloudKit schema once the app is in production?Often asked
Once a CloudKit schema is deployed to production, record types and fields cannot be deleted or have their types changed, so evolution must be additive. You develop in the development environment, then deploy schema changes to production before shipping the build that needs them. New fields must be optional, because old app versions will keep writing records without them. To rename or restructure, add the new fields, dual-write for a while, read with fallback, and later stop using the old fields without removing them. A schema version field on records helps clients interpret the data. Index additions such as queryable or sortable flags are made deliberately. Every change is tested by running old and new app versions against the same container.
30How would you use App Attest or DeviceCheck to protect your backend?Often asked
App Attest lets your server gain confidence that a request comes from a genuine instance of your app on a real Apple device. The app generates a key in the Secure Enclave, and Apple attests it. Your server validates that attestation once, then checks signed assertions on sensitive requests, such as redeeming rewards or high-value API calls, with a counter to prevent replay. DeviceCheck offers two per-device bits that survive reinstall, useful for flagging a device that already claimed a free trial bonus. Neither tells you who the user is, and neither replaces authentication. I roll out gradually and monitor failure rates, because attestation can fail for legitimate reasons. I treat failure as a risk signal rather than a hard block at first.
31Apple has publicly described a functional organisation rather than business-unit general managers. What are the trade-offs?Often asked
Apple's leaders have described, including in a 2020 Harvard Business Review article, an organisation grouped by expertise: hardware engineering, software, design and so on. Experts lead experts, and there is a single P&L at company level. The strength is deep craft and consistency across products, because one camera or silicon team serves everything, and decisions are made by people who know the domain. The costs are heavy cross-functional coordination, since every product depends on many teams, and leaders who must collaborate without owning all the levers. It also needs strong central prioritisation and a tightly managed release calendar. For most companies, the lesson isn't to copy the org chart. It is to value deep expertise in leaders and invest deliberately in cross-team integration.
32What observability would you put in place to know whether a release is healthy?Often asked
I would watch crash-free sessions and users per version, launch time, hang rate, memory terminations and battery impact. Sources include Xcode Organizer, which draws on users who opt in to share analytics, and MetricKit payloads collected in-app. A third-party crash SDK can add real-time alerts, as long as it is declared in the privacy manifest. Server-side, I track API error rates and latency segmented by app version, plus funnel metrics such as sign-in and purchase success. App Store Connect adds downloads, conversion and phased-release progress. Dashboards compare the new version against the previous one at equal exposure. Alerts trigger the pause-and-flag playbook. All telemetry is minimised, aggregated and covered by consent.
33How does the distribution pipeline change for apps offered through alternative marketplaces in the EU?Sometimes asked
Under Apple's Digital Markets Act changes in the EU, developers can distribute iOS apps through alternative app marketplaces or, under conditions, from their own website. Such apps skip full App Review. Instead, they go through notarization, which combines automated checks and human review focused on platform integrity, malware and security, not on business or content rules. They are still signed, and the system still verifies them at install. Marketplace developers must meet Apple's eligibility requirements. In-app payments can use alternatives to StoreKit, which shifts transaction verification, refunds and fraud handling onto the developer or payment provider. The business terms have changed several times, so I would check Apple's current documentation before designing around them.
Objective questions 33
1In what format does StoreKit 2 represent signed transactions?Asked almost every time
Why: StoreKit 2 and the App Store Server API use JWS, with a certificate chain that leads to Apple's root.
2Which identifier stays the same across all renewals of an auto-renewable subscription?Asked almost every time
Why: originalTransactionId identifies the subscription across renewals and restores, while each renewal gets a new transactionId.
3Which mechanism lets a developer limit the impact of a bad update on the App Store?Very often asked
Why: Phased release spreads automatic updates over several days and can be paused, so a regression reaches only part of the user base before it is caught.
4What is the most reliable way to confirm a StoreKit 2 purchase is genuine?Very often asked
Why: StoreKit 2 transactions are cryptographically signed, and server-side verification plus App Store Server Notifications covers renewals, refunds and revocations.
5How long can a TestFlight build be tested before it expires?Very often asked
Why: TestFlight builds are available to testers for 90 days after upload.
6Over how many days does an App Store phased release reach all automatic-update users if it is not paused?Very often asked
Why: A phased release ramps through set percentages over seven days.
7Which users does a phased release NOT hold back?Very often asked
Why: A phased release only paces automatic updates, so anyone can update manually and new installs get the latest version.
8Which receipt-validation approach has Apple deprecated in favour of the App Store Server API?Very often asked
Why: Apple deprecated the verifyReceipt endpoint and recommends the App Store Server API and signed transactions.
9Which StoreKit field lets a developer associate a purchase with their own user account?Very often asked
Why: appAccountToken is a UUID the app supplies at purchase, and it is returned in the signed transaction.
10What determines which capabilities, such as iCloud or push notifications, a signed app is allowed to use?Very often asked
Why: Entitlements are embedded in the signature, and iOS honours them only if the Apple-signed provisioning profile allows them.
11In which iOS version did App Tracking Transparency become enforced?Very often asked
Why: Apps had to request permission through ATT to track users and access the IDFA starting with iOS 14.5.
12With Advanced Data Protection on, what happens if a user loses access to all devices, the recovery contact and the recovery key?Very often asked
Why: Apple does not hold the keys under ADP, so the data is unrecoverable without a recovery method.
13Which App Store Server Notification type tells you Apple refunded a transaction?Very often asked
Why: A REFUND notification is sent and the transaction carries a revocationDate.
14How can a backend recover App Store Server Notifications it missed during an outage?Very often asked
Why: Get Notification History returns past notifications so the server can backfill gaps.
15Which field is best for deduplicating App Store Server Notifications in your webhook handler?Very often asked
Why: notificationUUID uniquely identifies each notification, so retries can be handled idempotently.
16Which of these is NOT a built-in App Store Connect version release option?Very often asked
Why: App Store Connect offers manual, automatic, scheduled and phased release, but no automatic rollback to an older binary.
17Why does iOS verify an app's code signature at install and launch?Often asked
Why: Code signing ties the binary to an Apple-issued developer identity, and on-device verification blocks tampered or unsigned code from running.
18What is the maximum number of external testers per app in TestFlight?Often asked
Why: Apple allows up to 10,000 external testers, invited by email or a public link.
19Who can be an internal TestFlight tester?Often asked
Why: Internal testing is limited to up to 100 App Store Connect users on the team, and their builds need no beta review.
20What is the file name of an app's or SDK's privacy manifest?Often asked
Why: Apple's privacy manifest is the PrivacyInfo.xcprivacy property list file.
21Which list correctly names the five main sections of the App Review Guidelines?Often asked
Why: The guidelines are organised into Safety, Performance, Business, Design and Legal.
22Where does a developer escalate an App Review rejection they disagree with?Often asked
Why: Developers can appeal rejections to the App Review Board.
23Which app thinning technique delivers only the architecture and assets a specific device needs?Often asked
Why: Slicing produces device-specific variants from one upload.
24In which month does Apple typically hold WWDC and announce the next major OS releases?Often asked
Why: WWDC is held in June, and the OS releases typically follow in autumn.
25Which three database types does a CloudKit container provide?Often asked
Why: CloudKit containers have public, private and shared databases.
26After a CloudKit schema is deployed to production, what can you NOT do?Often asked
Why: Production CloudKit schemas only allow additive changes, so fields and record types cannot be deleted.
27Which value must increase for every new build uploaded for the same app version?Often asked
Why: Each uploaded build of a version needs a unique, higher build number, stored in CFBundleVersion.
28What does App Attest primarily help a server establish?Often asked
Why: App Attest uses Secure Enclave keys attested by Apple to vouch for app and device integrity, not for user identity.
29What is the recommended way to test in-app purchases before release without real charges?Often asked
Why: Xcode StoreKit configuration files and sandbox accounts simulate purchases, renewals and refunds without real charges.
30When is requesting an expedited App Review most appropriate?Often asked
Why: Apple considers expedited requests for critical fixes or time-sensitive events, and grants them at its discretion.
31What happened to Bitcode for iOS apps?Sometimes asked
Why: Apple deprecated Bitcode in Xcode 14, and the App Store no longer accepts Bitcode submissions.
32What are on-demand resources used for?Sometimes asked
Why: On-demand resources are hosted by the App Store, fetched when needed, and can be purged by iOS to save space.
33How have Apple's leaders publicly described the company's organisational structure?Sometimes asked
Why: Apple has described a functional structure organised by expertise, notably in a 2020 Harvard Business Review article.
Track your progress through every blueprint in your dashboard.
Start learning