Home
Blog
Authors
Dan Burcaw

Dan Burcaw is Co-Founder & CEO of Nami ML. He built a top mobile app development agency responsible for some of the most elite apps on the App Store and then found himself inside the mobile marketing industry after selling his last company to Oracle.

Latest articles by
Dan Burcaw
Written by
Dan Burcaw
5 Nov

SKError Code Unknown & Other StoreKit SKError Cases

Understanding how to resolve StoreKit's SKError Code unknown error case plus a quick overview of all SKError.Code enumeration cases.

SKError.Code.unknown

Nothing is more frustrating than an error code that isn’t helpful. Such is the case with Apple StoreKit’s SKError.Code enumeration’s unknown case.  This is a catch-all error code if one of the long list of error codes doesn’t match.

Apple suggests two things if this error is encountered:

  • Development: Create a use a new App Store Connect test user
  • Production: Sign-out then back in to App Store

There are likely other undocumented reasons why this error might get thrown. If neither of the potential resolutions above do not fix the issue, please  reach out and we’ll try to help.

All SKError.Code cases

In addition to SKError Code Unknown, here is the complete SKError.Code enumeration list:

  • clientInvalid: client not allowed to perform the attempted action
  • paymentCancelled: User canceled a payment request
  • paymentInvalid: one of the payment parameters not recognized by the App Store
  • paymentNotAllowed: user not allowed to authorize payments
  • storeProductNotAvailable: requested product is not available on the store
  • cloudServicePermissionDenied: user not allowed to access Cloud service
  • cloudServiceNetworkConnectionFailed: device could not connect to network
  • privacyAcknowledgementRequired: user has not acknowledged Apple’s privacy policy for Apple Music
  • unauthorizedRequestData: app attempting to use properly without required entitlement
  • invalidOfferIdentifer: offer identifier is invalid
  • invalidOfferPrice: price specified in App Store Connect is no longer valid
  • invalidSignature: signature in a payment discount isn’t valid
  • missingOfferParams: parameters are missing in a payment discount
  • ineligibleForOffer: user is ineligible for subscription offer
  • overlayCancelled: indicates cancellation of an overlay
  • overlayInvalidConfiguration:  the overlay’s configuration is invalid
  • overlayPresentedInBackgroundScene: overlay displayed in background scene
  • overlayTimeout: overlay timed out
  • unsupportedPlatform: current platform doesn’t support overlays
  • unknown: unknown or unexpected error occurred

👉Read more: StoreKit Payment Sheet Failed: PassbookServiceUI Crash

A Final Word About StoreKit

If you are a Nami customer, you generally don’t need to worry about StoreKit implementation details since we take care of it for you. However, the Nami SDK does  surface certain StoreKit messages for debugging purposes depending on the log level.


       

       if(window.strchfSettings === undefined) window.strchfSettings = {};
   window.strchfSettings.stats = {url: "https://nami.storychief.io/en/skerror-code-unknown-skerror-cases?id=1832936048&type=26",title: "SKError Code Unknown & Other StoreKit SKError Cases",id: "51b60849-ff21-4408-b48f-9543da3cae59"};
           (function(d, s, id) {
     var js, sjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {window.strchf.update(); return;}
     js = d.createElement(s); js.id = id;
     js.src = "https://d37oebn0w9ir6a.cloudfront.net/scripts/v0/strchf.js";
     js.async = true;
     sjs.parentNode.insertBefore(js, sjs);
   }(document, 'script', 'storychief-jssdk'))
   
   👉App Store Error ITMS-9000 Invalid Binary Fix

Written by
Dan Burcaw
4 Nov

Fixing Error ITMS-9000 on Apple App Store

Error ITMS-9000, also known as Invalid Binary, is an Apple App Store error that developers often encounter during the submission process. This error signifies that the binary submitted does not meet the necessary requirements for distribution on the App Store. Resolving Error ITMS-9000 involves identifying the configuration issues in Xcode, provisioning profiles, or project settings to ensure the binary meets Apple’s standards.

What Causes Error ITMS-9000?

Error ITMS-9000 occurs when the app’s binary is improperly configured or fails to meet certain technical criteria set by Apple. This includes issues with the app’s entitlements, missing or mismatched provisioning profiles, or outdated build settings in Xcode. Familiarizing yourself with Apple’s requirements for app binaries can help prevent this error during submission.

Common Scenarios for Error ITMS-9000 - Invalid Binary

Developers frequently encounter this error in the following situations:

  1. Mismatched or Missing Provisioning Profiles: Submissions can fail if the binary isn’t properly signed with a valid provisioning profile.
  2. Incorrect App Entitlements: If entitlements do not match what is configured in App Store Connect, the submission may be rejected.
  3. Outdated or Improper Xcode Build Settings: Incompatible build settings or outdated SDKs in Xcode can trigger this error.
  4. Incomplete Metadata or Missing Assets: App metadata or required assets that are incomplete or missing often result in an Invalid Binary error.

👉Read more: SKError Code Unknown SKError Cases

Step-by-Step Solutions for Error ITMS-9000

Solution 1: Verify Provisioning Profiles and Code Signing

  • Purpose: Ensures that the app binary is properly signed and meets Apple’s distribution requirements.
  • Steps:
  1. In Xcode, go to Signing & Capabilities and ensure the correct provisioning profile is selected.
  2. Confirm that both the development and distribution profiles are active and valid.
  3. Rebuild the app with the correct provisioning profile and retry submission.
  • Result: Valid provisioning profiles eliminate most code-signing issues, allowing the binary to be properly validated.

Solution 2: Confirm App Entitlements in Xcode

  • Purpose: Ensures that the entitlements match the configurations in App Store Connect.
  • Steps:
  1. In Xcode, navigate to the Signing & Capabilities tab for the project.
  2. Confirm that all required entitlements (e.g., push notifications, iCloud) are correctly configured.
  3. Ensure these match the capabilities listed in App Store Connect.
  • Result: Matching entitlements prevent configuration mismatches and submission rejections.

Solution 3: Update Build Settings and SDK Version in Xcode

  • Purpose: Updates the project to meet Apple’s latest build requirements.
  • Steps:
  1. Open the Build Settings tab in Xcode.
  2. Ensure that the Base SDK is set to the latest iOS version.
  3. Confirm that the Deployment Target is compatible with Apple’s requirements for your app.
  4. Rebuild the binary and resubmit.
  • Result: Updated build settings ensure compatibility with App Store requirements and minimize submission errors.

Solution 4: Check Metadata and Assets in App Store Connect

  • Purpose: Ensures that all necessary app information and assets are complete and accurately filled out.
  • Steps:
  1. In App Store Connect, check the app’s metadata (description, screenshots, icons).
  2. Verify that all required assets are uploaded in the correct resolutions.
  3. Double-check localization settings if the app is available in multiple languages.
  • Result: Complete and accurate metadata helps prevent binary rejection due to missing information.

Solution 5: Use Application Loader for Direct Binary Uploads

  • Purpose: Sometimes bypassing Xcode submission and using Application Loader can help when facing submission errors.
  • Steps:
  1. Export the app archive from Xcode and save it to your machine.
  2. Use Application Loader to upload the binary directly to App Store Connect.
  3. Follow any additional instructions provided by Application Loader if errors occur.
  • Result: Uploading via Application Loader can sometimes resolve Xcode submission issues.

👉Read more: The App Store Rejected My App, Now What

Conclusion

Error ITMS-9000 - Invalid Binary, often arises from issues with provisioning profiles, entitlements, build settings, or incomplete metadata. By verifying profiles, checking entitlements, updating build settings, reviewing metadata, and considering Application Loader for uploads, developers can resolve this error and submit successfully.

Nami’s low-code solutions can streamline app configuration and deployment, handling these technicalities so you can focus on the core aspects of your app. Learn more at NamiML.

Written by
Dan Burcaw
4 Nov

How to Fix Error Code 3 on Google Play

Error Code 3, also known as Billing Unavailable, is a frequent issue developers encounter when testing in-app purchases or subscriptions on Google Play. This error typically indicates that the billing service is inaccessible on the device, often due to configuration issues or limitations in the testing environment. Addressing Error Code 3 effectively allows developers to ensure that Google Play Billing integration works seamlessly across all devices.

What Causes Error Code 3?

Error Code 3 typically arises when the billing service cannot be accessed due to configuration, network, or device limitations. This may happen if the app isn’t published on a testing track in the Google Play Console, or if the device does not support Google Play services (e.g., certain restricted or non-Android devices). Additionally, attempting to test billing functionality on an emulator without Google Play Store integration will often lead to this error.

Knowing these causes allows developers to apply focused solutions to rectify the error.

Common Scenarios for Error Code 3 - Billing Unavailable

The error frequently appears in the following situations:

  1. Testing on Unpublished Development Builds: Development builds without publishing in Play Console may lack access to billing functionality.
  2. Device-Specific Limitations: Testing on devices without Google Play services, like some emulators or restricted Android versions.
  3. Lack of Google Play Store Access: Devices that do not have the Google Play Store installed cannot access the billing service.
  4. Network Issues: Testing in regions or under network conditions that restrict access to Google Play services.

Step-by-Step Solutions for Error Code 3

Solution 1: Publish the App to an Internal or Closed Testing Track

  • Purpose: Allows billing functionality to be tested in a controlled environment by ensuring that the app is accessible through the Play Console.
  • Steps:
  1. Open the Google Play Console and navigate to App Releases.
  2. Set up an Internal Testing Track or Closed Testing Track for the app.
  3. Add testing accounts and publish the app to this track.
  • Result: This enables the app to access Google Play Billing, as it’s available on an approved track for testing.

Solution 2: Test on a Physical Device with Google Play Store Installed

  • Purpose: Emulators or devices without Google Play Store often lack access to billing services.
  • Steps:
  1. Test in-app purchases on a physical Android device that has the Google Play Store installed.
  2. Ensure that the device has the latest version of Google Play services installed.
  • Result: Testing on a real device with Google Play Store ensures compatibility with billing services.

Solution 3: Verify Google Play Services Availability on the Device

  • Purpose: Google Play services are required to enable billing functionality, and devices without it will not support in-app purchases.
  • Steps:
  1. On the testing device, go to Settings > Apps > Google Play Services.
  2. Confirm that Google Play services are installed and updated.
  • Result: Ensures that the device can access billing functions by confirming Google Play services are operational.

Solution 4: Clear Cache and Data for Google Play Store and Google Play Services

  • Purpose: Helps refresh the billing data and configurations by clearing cached information.
  • Steps:
  1. On the device, go to Settings > Apps > Google Play Store.
  2. Go to Storage and select Clear Cache and Clear Data.
  3. Repeat the process for Google Play Services.
  4. Restart the device and retry the purchase flow.
  • Result: This often resolves errors arising from outdated or mismatched cached billing data.

Solution 5: Ensure a Stable Network Connection

  • Purpose: A stable internet connection is necessary to establish communication with Google Play’s billing service.
  • Steps:
  1. Switch to a stable Wi-Fi or cellular network.
  2. Confirm that the device can access other Google services, such as the Play Store.
  • Result: Testing with a stable network ensures uninterrupted billing communication with Google servers.

Conclusion

Error Code 3 - Billing Unavailable, is a common issue that often stems from limitations in testing environments, device compatibility, or network conditions. By following these steps—publishing to a testing track, testing on devices with Google Play Store, verifying Google Play services, clearing cache, and ensuring network stability—developers can effectively troubleshoot and resolve this error.

With Nami’s low-code solutions, developers can skip the hassle of configuring and updating in-app billing, providing a ready-to-go environment that keeps your app’s billing setup in check. Discover more at NamiML.

Written by
Dan Burcaw
4 Nov

Offering App Store Alternative Payments in South Korea - 7 Takeaways

What app developers need to know to offer alternative payments for App Store apps in South Korea.

Alternative payments are finally here for the App Store. At least in South Korea, with a number of important caveats.

On March 15, 2022, detailed rules from the Korea Communications Commission went into effect preventing Apple and Google from mandating that app developers have to use their payment systems. These rules resulted from an amendment to the Telecommunications Business Act in South Korea which was signed into law in August 2021.

Now, Apple has finally provided app developers with detailed guidance for how to use a third-party payments provider in South Korea.

👉Read more: Epic v. Apple Ruling: What It Means for Your App

7 Takeaways from Apple’s South Korea Guidelines

Here are 7 takeways you need to know before considering whether to offer alternative payments in South Korea:

1. Apple still takes a 26% commission

The commission assessed is the normal App Store revenue split of 30% to Apple, less the fees associated with payment processing and related features.

2. Responsible for user support related to payments shifts from to the developer

App developers offering alternative payments in South Korea will need to provide all end user support functions related to payment processing issues, refund requests, subscription management, and more. Apple will not field any support requests related to third-party payments and will direct users to your support URL(s).

3. To offer alternative payments in South Korea, your app needs a special entitlement from Apple

Developers interested in offering alternate payments in South Korea must request a special entitlement called the StoreKit External Purchase Entitlement for use within a build of your app specific to the South Korea App Store storefront.

4. Your alternative payments app for South Korea must be a new, separate app binary

App developers who want to offer alternative payments in South Korea must create a new app binary. This app will need to use a new bundle ID that has not been previously published on the App Store.

5. You must select an Apple pre-approved payment service provider

Apple has pre-approved four payment services providers (PSP) in South Korea for payment processing:

  • KCP
  • Inicis
  • Toss
  • NICE

Each of these providers all meet Apple’s criteria which includes having broad payment support, industry standard privacy and security, fraud prevention, subscription billing, and split payments support. The special entitlement permits usage of only one PSP. You may request a PSP not on the pre-approved list, but Apple will consider additional PSPs at their discretion.

6. You must surface an External Purchase Modal Sheet
to users as part of your alternative payments flow

Before collecting payment information, you must inform users that the app is using alternative payments via a modal sheet conforming to a design provided by Apple.

External Purchase Modal Sheet required for alternative payments in South Korea

7. No web views allow for third-party in-app payments

Apple is requiring that the in-app payment experience for apps in South Korea taking advantage of alternative payments is fully native. No web views are permitted.

👉Read more: The App Store Rejected My App, Now What

Final Thoughts on Alternative Payments in South Korea

It remains to be seen whether app developers will widely adopt alternative payments in South Korea or anywhere else in the world should they become available in other juristidations.

Arguably, Apple’s requirements allow compliance with South Korea law while trying to minimize as much end user confusion as possible.

For app developers and publishers, owning the customer transaction can sound enticing. As we’ve shown in this article, there are important considerations that make it a less straightforward decision.

At Nami, we’re tracking the global regulatory pressure that has been building for some time that may force Apple and Google to more widely permit a solution such as what’s now available in South Korea.

We’ll have more to say in the future about the approach we’re taking with our product. In the meantime, we are 100% committed to providing a great experience for developers who depend on native Apple and Google billing.


       

       if(window.strchfSettings === undefined) window.strchfSettings = {};
   window.strchfSettings.stats = {url: "https://nami.storychief.io/en/app-store-alternative-payments-south-korea?id=561211902&type=26",title: "Offering App Store Alternative Payments in South Korea - 7 Takeaways",id: "51b60849-ff21-4408-b48f-9543da3cae59"};
           (function(d, s, id) {
     var js, sjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {window.strchf.update(); return;}
     js = d.createElement(s); js.id = id;
     js.src = "https://d37oebn0w9ir6a.cloudfront.net/scripts/v0/strchf.js";
     js.async = true;
     sjs.parentNode.insertBefore(js, sjs);
   }(document, 'script', 'storychief-jssdk'))
   
   

Written by
Dan Burcaw
4 Nov

How to Optimize Your Subscription Apps

Nami co-founder & CEO Dan Burcaw joins Steve Young on App Marketing by App Masters Live where he discussed optimizing mobile subscriptions apps. Dan and Steve conduct real-time audits of three subscription apps.

Nami co-founder & CEO Dan Burcaw joined Steve Young on App Masters Live where he discussed optimizing mobile subscriptions apps. The live session included real-time audits of three subscription apps.

This week is you will discover how to launch, scale, and optimize your mobile app subscription business. Our guest is Dan Burcaw, Co-Founder at Nami ML, a company focused on helping app developers start and grow mobile subscription businesses. Nami has assembled the world’s first machine learning dataset designed to accelerate subscription revenue. With over 1 Billion data points collected, Nami’s algorithm is trained to find and convert likely subscriptions.

Watch the replay on YouTube below or listen to the audio recording on Apple Podcasts:

👉Read more: Top Reasons Users Cancel Your Subscription