TestFlight Public Links are a great way to share beta versions of your apps with other members of the Apple Developer Program. With this new channel, you can share your TestFlight Public Links with the developer community, to gather valuable feedback on crucial elements, like technical implementation, user experience, design, and more.
To maximize the benefits of posting TestFlight Public Links in the Developer Forums, here are some best practices to keep in mind:
Provide details: Give comprehensive information about your app, like new features and test cases, and note specific areas where you seek feedback. The more detailed your post is, the better equipped the community will be to provide insight.
Select platforms: Select the platforms that your beta app supports.
Enter categories: Enter the App category you’ve selected or plan to select for your app on the App Store. Categories are critical to ensuring your post can be easily found by interested users.
Stay connected with notifications: Enable web and push notifications so you’ll know when you receive feedback on your post.
Note: The TestFlight app is still the most comprehensive way to gather feedback. This space is meant as a helpful secondary channel.
TestFlight
RSS for tagTestFlight within App Store Connect allows you to invite and manage testers who can install and beta test your iOS, iPadOS, tvOS, and watchOS apps using the TestFlight app on the App Store.
Posts under TestFlight tag
200 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
Since 4 days TestFlight (latest version) is not working anymore - error "Couldn't load apps" shown all the time (reinstalling the app doesn't solve the issue).
iPhone SE (1st gen) / iOS 15.8.3
Several other users also have this problem.
After changing the bundle identifier of my app, I’ve encountered several issues that I can’t seem to resolve, even though I’ve followed all the necessary steps. The app with the previous identifier was live on Testflight, and working perfectly fine, but now I’m facing the following problems:
WeatherKit Authentication Issue
WeatherKit has stopped working, and I’m getting authentication errors. I’ve updated the app in the Developer Portal to reflect the new bundle ID, but it still doesn’t authenticate properly.
Xcode Cloud Configuration Issue:
Xcode is asking me to set up Xcode Cloud again, which I understand is expected after a bundle ID change. However, during the setup process, it fails to recognize my remote repository, even though the repository is correctly added and visible under the Source Control tab.
TestFlight Internal Testing Issue:
I manually uploaded a build to TestFlight, but internal testers cannot use it because the invitation appears as invalid. This wasn’t an issue with the app’s previous identifier.
It seems like the bundle ID change has caused some fundamental issues that I can’t resolve despite following all the usual instructions. Has anyone experienced this before or knows how to resolve these problems?
I'm using the latest Xcode 16.2 on Mac OS Sequoia 15.2
Hi everyone,
I'm finally in the final steps of putting my first app online, but I'm encountering an issue during the review process. I need to fix the subscription, but the Sandbox account isn't being triggered in TestFlight.
In the logs, I see the main account being requested instead, and the TestFlight payment process isn't starting.
Does anyone know a workaround for this?
Thanks in advance for your help!
Hello, I’m trying to change the business model of my app to in-app subscriptions. My goal is to ensure that previous users who paid for the app have access to all premium content seamlessly, without even noticing any changes.
I’ve tried using RevenueCat for this, but I’m not entirely sure it’s working as expected. I would like to use RevenueCat to manage subscriptions, so I’m attempting a hybrid model. On the first launch of the updated app, the plan is to validate the app receipts, extract the originalAppVersion, and store it in a variable. If the original version is lower than the latest paid version, the isPremium variable is set to true, and this status propagates throughout the app. For users with versions equal to or higher than the latest paid version, RevenueCat will handle the subscription status—checking if a subscription is active and determining whether to display the paywall for premium features.
In a sandbox environment, it seems to work fine, but I’ve often encountered situations where the receipt doesn’t exist. I haven’t found a way to test this behavior properly in production. For example, I uploaded the app to TestFlight, but it doesn’t validate the actual transaction for a previously purchased version of the app. Correct me if I’m wrong, but it seems TestFlight doesn’t confirm whether I installed or purchased a paid version of the app.
I need to be 100% sure that users who previously paid for the app won’t face any issues with this migration. Is there any method to verify this behavior in a production-like scenario that I might not be aware of?
I’m sharing the code here to see if you can confirm that it will work as intended or suggest any necessary adjustments.
func fetchAppReceipt(completion: @escaping (Bool) -> Void) {
// Check if the receipt URL exists
guard let receiptURL = Bundle.main.appStoreReceiptURL else {
print("Receipt URL not found.")
requestReceiptRefresh(completion: completion)
return
}
// Check if the receipt file exists at the given path
if !FileManager.default.fileExists(atPath: receiptURL.path) {
print("The receipt does not exist at the specified location. Attempting to fetch a new receipt...")
requestReceiptRefresh(completion: completion)
return
}
do {
// Read the receipt data from the file
let receiptData = try Data(contentsOf: receiptURL)
let receiptString = receiptData.base64EncodedString()
print("Receipt found and encoded in base64: \(receiptString.prefix(50))...")
completion(true)
} catch {
// Handle errors while reading the receipt
print("Error reading the receipt: \(error.localizedDescription). Attempting to fetch a new receipt...")
requestReceiptRefresh(completion: completion)
}
}
func validateAppReceipt(completion: @escaping (Bool) -> Void) {
print("Starting receipt validation...")
guard let receiptURL = Bundle.main.appStoreReceiptURL else {
print("Receipt not found on the device.")
requestReceiptRefresh(completion: completion)
completion(false)
return
}
print("Receipt found at URL: \(receiptURL.absoluteString)")
do {
let receiptData = try Data(contentsOf: receiptURL, options: .alwaysMapped)
print(receiptData)
let receiptString = receiptData.base64EncodedString(options: [])
print("Receipt encoded in base64: \(receiptString.prefix(50))...")
let request = [
"receipt-data": receiptString,
"password": "c8bc9070bf174a8a8df108ef6b8d2ae3" // Shared Secret
]
print("Request prepared for Apple's validation server.")
guard let url = URL(string: "https://buy.itunes.apple.com/verifyReceipt") else {
print("Error: Invalid URL for Apple's validation server.")
completion(false)
return
}
print("Validation URL: \(url.absoluteString)")
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"
urlRequest.httpBody = try? JSONSerialization.data(withJSONObject: request)
URLSession.shared.dataTask(with: urlRequest) { data, response, error in
if let error = error {
print("Error sending the request: \(error.localizedDescription)")
completion(false)
return
}
guard let data = data else {
print("No response received from Apple's server.")
completion(false)
return
}
print("Response received from Apple's server.")
do {
if let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] {
print("Response JSON: \(json)")
// Verify original_application_version
if let receipt = json["receipt"] as? [String: Any],
let appVersion = receipt["original_application_version"] as? String {
print("Original application version found: \(appVersion)")
// Save the version in @AppStorage
savedOriginalVersion = appVersion
print("Original version saved in AppStorage: \(appVersion)")
if let appVersionNumber = Double(appVersion), appVersionNumber < 1.62 {
print("Original version is less than 1.62. User considered premium.")
isFirstLaunch = true
completion(true)
} else {
print("Original version is not less than 1.62. User is not premium.")
completion(false)
}
} else {
print("Could not find the original application version in the receipt.")
completion(false)
}
} else {
print("Error parsing the response JSON.")
completion(false)
}
} catch {
print("Error processing the JSON response: \(error.localizedDescription)")
completion(false)
}
}.resume()
} catch {
print("Error reading the receipt: \(error.localizedDescription)")
requestReceiptRefresh(completion: completion)
completion(false)
}
}
Some of these functions might seem redundant, but they are intended to double-check and ensure that the user is not a previous user. Is there any way to be certain that this will work when the app is downloaded from the App Store?
Thanks in advance!
Is anyone else suddenly having issues getting new builds to TestFlight?
It worked earlier this afternoon and I pushed build 22 of my app. I found an issue, made a fix and expired it. Then I built and uploaded build 23 about 45 minutes later and now that one isn't showing 90 minutes later. I didn't make any other changes to my project, just a simple 2 line fix. I'm doing the archive and distribute the same as I always have and am seeing no errors, nor am I getting any error emails.
Could pushing 2 builds within an hour put me at the back of a queue, or expiring my latest build before uploading a new one caused an issue?
All builds up until now have shown within minutes.
Hi,
Testflight app is showing "Couldn't Load Apps. TestFlight is currently unavailable. Try again." error each time when i trying to open it last 2 days. I'm tried to uninstall/re-install TestFlight app, but error still remain.
Can anyone confirm this error?
Devices which is affected with the same error: iPad 6 (2018) / iOS 17.7, iPad Pro / iOS 16.7.9, iPad Air 2 / iOS 15.8.2
I have a developer certificate but not a distribution certificate (its not my Apple account).
Its possible to create an .xcarchive with a developer certificate, but what about a .ipa? After creating an archive, non of the distribution options within XCode will work without a dist cert.
Is there another way to make an .ipa with just a dev cert? And if so is that going to be a dev build rather than a prod build (i.e. the .ipa would only install onto provisioned devices and would be no good for uploading to testflight for example)
Me and my team can not open the Testflight app on iOS 15/16/17 Devices, all the time a ErrorMessage appears:
App can not be loaded, Testflight is not available at the moment.
On iOS 18 all works as expected!
@apple any idears for all of the testers?
I have uploaded an beta version into Testflight and added few member under internal testing. However, no one can receive an internal testing invitation email. I tried to re-upload a new version and re-create a new internal testing group but no luck.
Thank you so much.
When installing the app through TestFlight, a popup message reading 'The app couldn't be installed. Try again' appears. When I check the logs using the Console app, I only see the log.
"jp.." = "TFCachedInstallRequest(0x3001fdc30): { bundleID = jp.., appType = 2, version = 1.8.0(4.2630), currentTaskStatus = 22, previousTaskStatus = 9, installStatus = 0, percentComplete = 0.000000, userFailureReason = <TFError: 0x3037dd280>: errorMessage = \Uc571\Uc744 \Uc124\Uce58\Ud560 \Uc218 \Uc5c6\Uc2b5\Ub2c8\Ub2e4. \Ub2e4\Uc2dc \Uc2dc\Ub3c4\Ud558\Uc2ed\Uc2dc\Uc624., code = -1, serverCode = 617, serverFailureReason = Error Downloading Install Data, persistentIdentifier = 0 }";
}
How can I resolve this issue?
When uploading to Testflight the following questions get posted.
How to answer this question gets asked in many forums, however none of the answers are satisfactory and it seems every body misreads option two.
What type of encryption algorithms does your app implement?
Encryption algorithms that are proprietary or not accepted as standard by international standard bodies (IEEE, IETF, ITU, etc.)
Standard encryption algorithms instead of, or in addition to, using or accessing the encryption within Apple's operating system
Both algorithms mentioned above
None of the algorithms mentioned above
In the case where an application is using standard encryption provided by the OS itself and isn't doing anything proprietary, what should the answer be?
Many people on the internet say the answer should be 2).
2) Does mention standard encryption algorithms, but everybody seems to gloss over this phrase "instead of, or in addition to, using or accessing the encryption within Apple's operating system"
Two is not saying the app uses standard encryption algorithms from the OS, two is saying using standard encryption algorithms instead of or in addition to, those provided by the OS.
In the above options, there is none to select for the situation where the app only uses standard algorithms from the OS. If that is what 2 is meant to be, then the grammar and English usage doesn't not actually mean that.
The phrase "instead of or in addition to" changes that.
So what option to choose? Is there a bug in 2 and its English grammar is incorrect and doesn't convey the actual intended meaning?
**Hi everyone **
We try to add BackgroundAssetExtension to our project, in local testing work fine, but when we try upload app to TestFlight we get some errors that we don't know how to fix.
App
Supported Destinations: iPhone, iPad, Mac(Designed for iPad)
Minimum Deployments: iOS 12
BackgroundAssetExtension
Minimum Deployments: iOS 16.4
Error when try to upload to TestFlight:
"<IDEDistributionIssue: severity(error), error(Error Domain=ContentDelivery Code=90171 \"Asset validation failed\" UserInfo={IDEDistributionIssueSeverity=3, NSLocalizedDescription=Asset validation failed, NSLocalizedRecoverySuggestion=Invalid bundle structure. The \U201cDemo.app/decompressed_data_5.bin\U201d binary file is not permitted. Your app cannot contain standalone executables or libraries, other than a valid CFBundleExecutable of supported bundles. For details, visit: https://developer.apple.com/documentation/bundleresources/placing_content_in_a_bundle (ID: 3dfe207a-b4e5-43db-9464-fcf59a730545)})>",
"<IDEDistributionIssue: severity(error), error(Error Domain=ContentDelivery Code=90924 \"Asset validation failed\" UserInfo={IDEDistributionIssueSeverity=3, NSLocalizedDescription=Asset validation failed, NSLocalizedRecoverySuggestion=Invalid Info.plist value. (ID: 073b5957-2e5b-4a7b-a4ae-7735b30a2d05)})>"
when we checked archive (Show package contents) that many files like
compressed_data_1.bin
compressed_data_2.bin
compressed_data_3.bin
compressed_data_4.bin
compressed_data_5.bin
compressed_data_6.bin
decompressed_data_1.bin
decompressed_data_2.bin
decompressed_data_3.bin
decompressed_data_4.bin
decompressed_data_5.bin
decompressed_data_6.bin
We added to main target in Build Phase -> Embed ExtensionKit Extensions
Info.plist
<key>BAEssentialMaxInstallSize</key>
<integer>3250188</integer>
<key>BAInitialDownloadRestrictions</key>
<dict>
<key>BADownloadAllowance</key>
<integer>3250188</integer>
<key>BADownloadDomainAllowList</key>
<array>
<string>*</string>
<string>*</string>
</array>
<key>BAEssentialDownloadAllowance</key>
<integer>3250188</integer>
</dict>
<key>BAManifestURL</key>
<string>https://*/itemsmeta</string>
<key>BAMaxInstallSize</key>
<integer>3250188</integer>
We will be appreciate for any suggestions :) If need some additional information let me know :pray:
When trying to add a tester to app.connect for use as a tester for TestFlight I get error "A user with this email address already exists on this team."
I have tried various suggestions in the forum with no success.
The user email has previously been used and had been assigned as tester to app and was able to connect and install app on testflight.
Previously they were running TestFlight on iPad and we were looking to add TestFlight to iPhone as well but I was unable to resend invite so I followed suggestions and removed the user. First I removed tester from just the app and this didn't work, then I removed them as a tester under Users and Access.
Now when trying to re-add the user using their Apple ID associated email I get the error that email exists.
I have checked under User and Access as well as under each app that they are no longer listed. Their email doesn't show under User and Access nor does it show in any expired app but shows as deleted under All Testers under TestFlight tab.
When trying to add user I also tried using different role and user name.
I have uploaded my app to App Store Connect TestFlight. Then I have downloaded it in TestFlight on my iPad. But the app always crashes a few seconds after opening. It seems to be always the same issue. I have a few crash reports in App Store Connect-->App name-->TestFlight-->Feedback-->Crashs.
I have opened a crash report in Xcode but I don´t find the error that causes the crash. How can I find the error in Xcode? Is it possible to find the class and line in the class where the crash happened?
In addition, how can I export a crash report from Xcode?
The crash doesn´t happen in debug mode on my iPad, it only happens when I install and open my app after downloading it from TestFlight on my iPad.
not able to redeem the invite in TestFlight receiving below error
The apple account you are currently signed with does not matching the one which is associated to this invitation you can sign in to testflight with the original apple account or request new invitation
from developer
I have a problem regarding the application that I built using flutter, I use the camera library, when I test in xcode with the debug / release schema the camera can open, but when I try to send it to the testflight testers I can't open the camera, for the permissions I have added and the testers have received the required permissions.
I recently submitted my app, Ai voice changer - Video effects (Build version 1.0.0 (2)), for beta testing and received feedback indicating that my app was rejected due to a violation of Guideline 4.3(a) - Design - Spam. The rejection email states that my app shares a similar binary, metadata, and/or concept to apps already submitted to the App Store, with only minor differences, leading to the classification of my app as spam.
I would like to respectfully request clarification regarding the specific aspects of my app that led to this rejection. I have ensured that the app I submitted offers unique functionalities and has been carefully designed to stand out from other apps in the same category. The features of my app, including apply voice changer effects on videos, were developed with originality and are intended to offer a new experience to users.
To provide additional context, my app was created using a unique approach and has distinct features compared to other voice changers available on the App Store. However, I am open to any suggestions on how I can improve the app’s submission to meet your guidelines fully. My goal is to provide a valuable and unique tool for users, and I would appreciate further guidance on how to address the perceived overlap with other apps.
Could you please provide specific examples or areas where my app may appear too similar to others, and what steps I can take to resolve this issue? I would be grateful for any assistance or suggestions on how I can resubmit my app with full compliance to the App Store guidelines.
Thank you for your time and support. I look forward to your response and the opportunity to resolve this matter.
Best regards,
Jay limbani
Ai voice changer - video effects
Hi, I'm new to software development and facing a problem that don't know how to solve.
I have a piece of code using .backgroundPreferenceValue and .anchorPreference modifiers to monitor a button's position while dragging. It works perfectly on preview, simulator, and my own device if I download it through a cable connected to my computer. However, today I distributed it to TestFlight and found out it broke. I repeated the process serval times but the result is still the same. Has anybody run into the same type of problem before? Desperately need help. Many many thanks!
I'm not sure how we reached the point where we accepted the current situation of subscription testing in Testflight as the normal. It has been drama for years now. It's also super confusing and many people don't understand why/what is happening. Let me write down first what is happening, after that all the issues and potential solution will be clear.
Production app
Uses live appstore backend + your apple id that is signed in on the device
Testflight app
Uses sandbox appstore backend + your apple id that is signed in on the device
Local / Xcode
Uses sandbox appstore backend + your sandbox apple id if correctly set on your device (settings / appstore / sandbox account).
The problem is you can only manage the following subscriptions
Live appstore backend + live apple id
Sandbox appstore backend + sandbox apple id
We are missing the option to manage
Sandbox appstore backend + live apple id -> the situation we deal with in testflight.
So there is no way to manage your testflight subscriptions. Few potential solutions that apple should implement:
We need an option within the Testflight app to Manage subscriptions, that should than open the live apple id on the sandbox backend.
Or give developers the option to use the sandbox account for testflight as well, not only for developing locally.
To test in testflight you basically have to wait for the subscription to expire, but they also recently changed the renewal rates. It used to be 5 minutes for a month, now its 1 day for a month, so you have to wait 12 days before your monthly sub on testflight is gone.
So we cant manage testflight obtained subscriptions, we cant use API's to manage them, we cant change settings like renewal rates, they are totally useless.
This is really not usable at all. The situation has been like this for years, and all of us seem to accept this as normal. But this is a horrible developer experience, and we have to launch apps in production that we can't even test properly, only locally (so we can't let our testers test). How is this acceptable @Apple?
I am developing an app with support for In-App Purchases (IAP) for consumable products using StoreKit. I have defined the products in ProductList.plist and Product.storekit, but I am unable to connect them correctly to App Store Connect. Here are the details:
Products defined in ProductList.plist:
Bolet Evento Vip: com.cover.boleto.vip
Boleto Evento Básico: com.cover.boleto.basico
Configuration in Product.storekit:
The products have prices and basic configurations, but they do not seem to link properly in App Store Connect.
Steps I have taken:
Configured IAP simulation in Xcode.
Attempted to register the products in App Store Connect.
Issues I am facing:
The products are not appearing in App Store Connect after configuration.
My app cannot seem to fetch consumable products from App Store Connect.
Question:
What steps should I follow to correctly register consumable products in App Store Connect and connect the app with StoreKit for production?
Any advice or guidance would be greatly appreciated. Thank you!