TestFlight

RSS for tag

Use TestFlight in App Store Connect to invite and manage beta testers for iOS, iPadOS, tvOS, and watchOS apps. Discuss questions here and share app builds publicly via TestFlight under the Community topic.

TestFlight Documentation

Posts under TestFlight subtopic

Post

Replies

Boosts

Views

Activity

Not able to submit for Beta Review
Hi everyone, I'm trying to submit the first app for Beta Review to do Beta in Testflight, created a separate workflow for Beta Build and stuck at the step of filling in the "Information for Beta Review" form. After filling in all the fields and clicking "Save" it just shows me an empty popup with "Close" button, and I see that request for https://appstoreconnect.apple.com/ci/api/teams//testflight/information-v2?product_id=ACTUAL_ID_REPLACED_HERE is failing with 404. Does anyone have any idea what I might be doing wrong? Thanks and appreciate the help
1
1
127
Jun ’25
Requested app is not available or does not exist
We’re seeing a strange issue with our TestFlight setup. We normally have 4 apps available in TestFlight (all of which are also live on the App Store). Today, 3 of them disappeared from TestFlight because their builds were marked as expired. I re-submitted new test flight builds, which made the apps reappear but now when trying to install ANY of our apps, we get an error saying: “The requested app is not available or doesn’t exist.” There are no issues or flags on the TestFlight pages in App Store Connect, all builds are validated, and all apps are still downloadable from the App Store without any problems. Has anyone else experienced this?
0
3
248
Jun ’25
Uploaded Build Missing NSLocationAlwaysAndWhenInUseUsageDescription Key Despite this Key Being in the Info.plist File
Hey All! I keep receiving an email from Apple stating "You have a missing purpose string in your Info.plist" for the key "NSLocationAlwaysAndWhenInUseUsageDescription". The thing is, though, that we are setting that value within our build Info.plist. The data in that value is even reflected into the application after build, with the correct purpose string showing up when requesting location services. We currently do our builds via Azure Devops CI/CD, where we use xcodebuild for this process. The archive also generates an Info.plist without the location key, so I tried manually inserting it before deployment. Also no luck. Anyone else had this issue or know how to resolve it? Snippet to show how the location key is currently set during build: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>NSLocationWhenInUseUsageDescription</key> <string>Application uses location data for accurate maps display</string> </dict> </plist> Thanks!
1
0
145
Jun ’25
Guidance on Java JRE Usage for PST Parsing in Mac OS Application– Code Signing & App Store Compliance
Hello Apple Support Team, We are developing a macOS application that allows users to import and view PST files (Microsoft Outlook archives). These files contain a complex, proprietary format that requires specialized parsing libraries. To achieve this, we are using Aspose Email for Java, which is currently one of the few reliable libraries that support complete PST parsing across platforms. Why we are using Java & Aspose The Aspose Email Java library provides a comprehensive API to extract mail data (including metadata, attachments, and folder structure) from .pst files. A native Swift or Objective-C alternative with full .pst parsing capability does not exist, which is why we opted for a Java-based helper module that runs in the background and communicates with the macOS app over a Unix domain socket. How we bundle it We package the AsposeEmail.jar and a custom JRE (Java Runtime Environment) created using jlink, tailored to run only our jar. This entire setup (JAR + JRE) is bundled within the Contents/Resources directory of the macOS app, and we invoke the Java runtime using standard process launch APIs from Swift. Problem during App Store Submission When we archive the app and submit it to the App Store, the validation step raises an error: ITMS-90284: Invalid Code Signing - The executable 'com.app.sample.appstore.pkg/Payload/Sample.app/Contents/Resources/custom-jre-universal/lib/cli ent/libjsig.dylib' must be signed with the certificate that is contained in the provisioning profile. ITMS-90284: Invalid Code Signing - The executable 'com.app.aample.appstore.pkg/Payload/Sample.app/Contents/Resources/custom-jre-universal/lib/cli ent/libjvm.dylib' must be signed with the certificate that is contained in the provisioning profile. When we attempt to code sign the custom JRE, especially the .dylib files inside, the runtime breaks. Java is unable to launch correctly and throws permission errors and execution failures. Alternative we thought of (On-Demand Download) To avoid the code signing issue, we decided to remove the JRE from the bundle and instead download it on demand when the user performs an action like "Import PST". However, we realized this may violate the App Store Review Guideline 2.5.2: Our use case, while not dynamically modifying features, does download and execute a Java runtime, which could be interpreted as executing new code post-installation. How can we proceed? We are looking for Apple’s guidance on the correct and compliant path forward: Is there a recommended way to bundle and codesign a custom JRE so it is accepted by the App Store? Is on-demand download of a custom runtime for a very specific parsing task permitted, assuming it doesn't modify app features but simply supports user-initiated operations? We would greatly appreciate any guidance or best practices on how to handle this situation, particularly with respect to App Store compliance. Regards, Maaz Hussain
6
0
274
Jun ’25
Unable to create in sandbox subscription
I am a test engineer. When I subscribe with a sandbox account in a test project, I find that the prompt "Not allowed to create an iTunes account" appears, but my account was successfully added in the sandbox. I tried two different email suffixes @gmail.com and @tester.com, and both showed this prompt. The developers in the team were also unable to solve this problem. Does anyone know how to deal with this situation?
1
0
194
Jun ’25
Struggling with getting access to testflight
I’m running into an issue with TestFlight and would appreciate any help or insight. A developer previously sent a TestFlight invite to my email address, which I accessed on a different iPhone (my girlfriend’s), as I was using a non-iOS device at the time. The app installed and worked fine on that device. Now that I have my own iPhone and have downloaded the TestFlight app, I can’t access the invite or app under my own Apple ID. The developer has tried to resend the invite to the same email, but I’m not receiving anything — no email, no app showing in TestFlight. We also tried: Reopening the original invite email on my new iPhone Reinstalling TestFlight Checking for any spam/junk mail Confirming the correct Apple ID is used Nothing has worked so far. Is there a way to: Reset or revoke my original TestFlight tester status? Ensure a fresh invite can be sent and received? Link the original invite to my current Apple ID and device? Appreciate any advice — thanks in advance
0
0
191
Jun ’25
TestFlight App Clip always display white card with "This app clip is not currently available in your country or region" error.
Hi, I have uploaded the Main App with App Clip to Apple Store Connect and launch in TestFlight. But at first build I wrote wrong App Clip's associated domains in the App build target ,and also mistakes in the AASA file. Then I correct it like appclips:com.***.***.AppClip in both places. However, I tried many uploaded version and it still display "The app clip in not currently available... " error. The domain is successfully verified in App Store Connect and the test version can dowloaded to device for testing. Only that it can't show the right Card as expected. I want to ask if I set the wrong domain in the beginning few builds, and correct it later. Will it work again or not? Moreover, the tester email is not the same as apple id for tester's mobile phone. I have corrected it . I don't know will it affect the result ,and maybe something have stored in Apple backend server for testflight data and need to be refresh to make it work. Thanks and please advise. Best regards Sunny.
6
1
226
Jun ’25
[Open Beta] Endless Zombies – Roguelike Action Shooter (iOS)
App Name: Endless Zombies Platform: iOS Genre: Roguelike / Survival / Action TestFlight Link: https://testflight.apple.com/join/DEIN-CODE Status: Open Beta – limited seats available 🎮 What is Endless Zombies? Endless Zombies is a fast-paced, top-down roguelike shooter where you must survive increasingly intense zombie waves — with fully separated movement and aiming controls for maximum precision and tactical depth. Players can upgrade their weapons, unleash special attacks, and face progressively stronger threats including Baby Waves (fast mini-zombies) and Boss Battles against giant elite enemies with unique behavior. This is not just about survival — climb the global leaderboard and fight your way to the top! 🏆 Compete for high scores, dominate the kill count, and earn bragging rights (and potential rewards in future tournaments). Endless Zombies is currently in its first public beta and we’re looking for players who want to help us improve mechanics, test new systems, and shape the final experience. 🧪 Looking for beta testers to: Test gameplay fluidity and aiming responsiveness Evaluate performance on different iOS devices Provide feedback on UI, game balance, and spawn pacing Report bugs and edge-case issues 🚀 Features: 🎯 Dual control movement + aiming 🧠 Smarter, optimized enemy spawn logic ⚔️ Upgradeable weapons and energy system 👥 Online friends chat and leaderboard system (PlayFab-based) 📊 Stats, progress tracking, and UI improvements Join via TestFlight: 👉 https://testflight.apple.com/join/DEIN-CODE We’d love to hear what you think!
1
0
375
Jun ’25
Safari Extension: 'Review in Safari' Button Not Appearing After Reinstall — TestFlight vs. App Store?
I'm developing a Safari extension and noticed that some extensions, when uninstalled and installed again, trigger the "Review in Safari" button to request permissions. However, when I uninstall and reinstall my own extension during development, I can't get Safari to show this button again. Could the reason be that the extensions showing the "Review in Safari" button are installed from the App Store, while my extension is distributed via TestFlight? Does the distribution method affect how Safari handles extension permissions after reinstalling?
0
0
145
Jul ’25
Invalid Characters in Info.plist File
ITMS-90328: Your package contains a file AppName.app/Info.plist /Users/admin with a name that contains invalid characters. Avoid using control characters in the file names. ITMS-90328: Your package contains a file AppName.app/Info.plist with a name that contains invalid characters. How do I resolve this issue? My Info.plist file has no control character
3
0
204
Jul ’25
XCode overwrites watch companion's Info.plist with invalid data
Hi developers. I've been working on a Watch companion app for my product these past few days, and I'm currently trying to push it to TestFlight. I get stuck at the validation step with endless errors. The first one typically is missing WKApplication in Info.plist. That's fine, I'll add the field in Watch target > Info. Now more errors appear: Invalid UIDeviceFamily value of '1' and '2' Unsupported key UIRequiredDeviceCapabilities DTPlatformName value invalid Missing architecture, the bundle must contain arm64_32 because it's built with watchOS SDK 5+ I never set these values in the Info tab, so my guess is they're being overwritten by the Runner Build Settings, even though watch target build settings are correct (for example, Targeted Device Family is set to Apple Watch). What I've tried so far: Disabling auto generation of the Info.plist, and manually setting UIDeviceFamily to '4', but that doesn't help, unless I do it after creating the archive by editing the archive files and resending it to validation. I also tried a bunch of other post-build modifications to try and fix all the errors but new ones kept popping up. Cleaning Build Folder and DerivedData, restarting XCode, rebooting the computer... no effect, which is expected given that the building process doesn't return any errors Validating just the app without the apple watch (so from my main branch), still works as expected. Recreating a blank watchOS target and trying to validate just that, I get stuck in the same way. Project details: XCode Version 16.3 (16E140) Flutter 3.27.3 Targeting latest watchOS and iOS 16+ Do you have an idea what could be the problem here ? I'm sure it's just a missing or invalid property in some configuration file, but I can't figure it out and there are no resources online documenting the issue, and no "tutorials" on how to properly set up a watch target from Apple. Thank you for your time. A.H.
0
0
253
Jul ’25
Main Camera Access Distribution to TestFlight
Can you help me how to upload it to TestFlight setting and distribution. I have try it but got this error. I have setting profile for camera access to but it still like this.
Replies
4
Boosts
0
Views
255
Activity
Jun ’25
Cannot install the test flight version on MacOS
My developer posted the latest beta release of our app to test flight. When I went to install it on my Mac - the the progress circle gets about 2/3 of the way to completion, then installation stops - and I see the Install button again. Apple M1 / 16GB ram / Sequoia 15.3
Replies
2
Boosts
3
Views
339
Activity
Jun ’25
I need help with the external use configuration
When adding a phone number in the contact information for submitting an app for external use, it doesn’t let me proceed. It says the number is invalid and that I should ensure it contains only numbers, but it still won’t let me continue. I need help with the external use configuration.
Replies
0
Boosts
0
Views
77
Activity
Jun ’25
Not able to submit for Beta Review
Hi everyone, I'm trying to submit the first app for Beta Review to do Beta in Testflight, created a separate workflow for Beta Build and stuck at the step of filling in the "Information for Beta Review" form. After filling in all the fields and clicking "Save" it just shows me an empty popup with "Close" button, and I see that request for https://appstoreconnect.apple.com/ci/api/teams//testflight/information-v2?product_id=ACTUAL_ID_REPLACED_HERE is failing with 404. Does anyone have any idea what I might be doing wrong? Thanks and appreciate the help
Replies
1
Boosts
1
Views
127
Activity
Jun ’25
Requested app is not available or does not exist
We’re seeing a strange issue with our TestFlight setup. We normally have 4 apps available in TestFlight (all of which are also live on the App Store). Today, 3 of them disappeared from TestFlight because their builds were marked as expired. I re-submitted new test flight builds, which made the apps reappear but now when trying to install ANY of our apps, we get an error saying: “The requested app is not available or doesn’t exist.” There are no issues or flags on the TestFlight pages in App Store Connect, all builds are validated, and all apps are still downloadable from the App Store without any problems. Has anyone else experienced this?
Replies
0
Boosts
3
Views
248
Activity
Jun ’25
Testflight of Finnia
Hello there! I have developed a website (https://finnia.ch). Now I have transformed it to an app (with webview). If anyone would like to check it out and test it here is the link: https://testflight.apple.com/join/hmyDw74t It is a administration tool (not a game). Simon
Replies
0
Boosts
0
Views
145
Activity
Jun ’25
Testflight Unavailable error
Since I donwloaded Testflight, an error message appears indicating that "Testflight is temporarily unavailable. Try again." And some of my colleagues encounter the same problem. Do you know what the issue can be?
Replies
0
Boosts
0
Views
161
Activity
Jun ’25
Uploaded Build Missing NSLocationAlwaysAndWhenInUseUsageDescription Key Despite this Key Being in the Info.plist File
Hey All! I keep receiving an email from Apple stating "You have a missing purpose string in your Info.plist" for the key "NSLocationAlwaysAndWhenInUseUsageDescription". The thing is, though, that we are setting that value within our build Info.plist. The data in that value is even reflected into the application after build, with the correct purpose string showing up when requesting location services. We currently do our builds via Azure Devops CI/CD, where we use xcodebuild for this process. The archive also generates an Info.plist without the location key, so I tried manually inserting it before deployment. Also no luck. Anyone else had this issue or know how to resolve it? Snippet to show how the location key is currently set during build: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>NSLocationWhenInUseUsageDescription</key> <string>Application uses location data for accurate maps display</string> </dict> </plist> Thanks!
Replies
1
Boosts
0
Views
145
Activity
Jun ’25
TestFlight problem
"this beta is not accepting new testers at this time" Please fix this error
Replies
2
Boosts
0
Views
184
Activity
Jun ’25
AppTransaction.shared fails after AppleID password change.
I changed my AppleID password. Now for any app distributed via TestFlight the call to AppTransaction.shared throws "Unable to Complete Request". This only happens for this one ID, and only when distributed via TestFlight. I have tried different apps and devices, all with the same result.
Replies
0
Boosts
0
Views
100
Activity
Jun ’25
Guidance on Java JRE Usage for PST Parsing in Mac OS Application– Code Signing & App Store Compliance
Hello Apple Support Team, We are developing a macOS application that allows users to import and view PST files (Microsoft Outlook archives). These files contain a complex, proprietary format that requires specialized parsing libraries. To achieve this, we are using Aspose Email for Java, which is currently one of the few reliable libraries that support complete PST parsing across platforms. Why we are using Java & Aspose The Aspose Email Java library provides a comprehensive API to extract mail data (including metadata, attachments, and folder structure) from .pst files. A native Swift or Objective-C alternative with full .pst parsing capability does not exist, which is why we opted for a Java-based helper module that runs in the background and communicates with the macOS app over a Unix domain socket. How we bundle it We package the AsposeEmail.jar and a custom JRE (Java Runtime Environment) created using jlink, tailored to run only our jar. This entire setup (JAR + JRE) is bundled within the Contents/Resources directory of the macOS app, and we invoke the Java runtime using standard process launch APIs from Swift. Problem during App Store Submission When we archive the app and submit it to the App Store, the validation step raises an error: ITMS-90284: Invalid Code Signing - The executable 'com.app.sample.appstore.pkg/Payload/Sample.app/Contents/Resources/custom-jre-universal/lib/cli ent/libjsig.dylib' must be signed with the certificate that is contained in the provisioning profile. ITMS-90284: Invalid Code Signing - The executable 'com.app.aample.appstore.pkg/Payload/Sample.app/Contents/Resources/custom-jre-universal/lib/cli ent/libjvm.dylib' must be signed with the certificate that is contained in the provisioning profile. When we attempt to code sign the custom JRE, especially the .dylib files inside, the runtime breaks. Java is unable to launch correctly and throws permission errors and execution failures. Alternative we thought of (On-Demand Download) To avoid the code signing issue, we decided to remove the JRE from the bundle and instead download it on demand when the user performs an action like "Import PST". However, we realized this may violate the App Store Review Guideline 2.5.2: Our use case, while not dynamically modifying features, does download and execute a Java runtime, which could be interpreted as executing new code post-installation. How can we proceed? We are looking for Apple’s guidance on the correct and compliant path forward: Is there a recommended way to bundle and codesign a custom JRE so it is accepted by the App Store? Is on-demand download of a custom runtime for a very specific parsing task permitted, assuming it doesn't modify app features but simply supports user-initiated operations? We would greatly appreciate any guidance or best practices on how to handle this situation, particularly with respect to App Store compliance. Regards, Maaz Hussain
Replies
6
Boosts
0
Views
274
Activity
Jun ’25
Unable to create in sandbox subscription
I am a test engineer. When I subscribe with a sandbox account in a test project, I find that the prompt "Not allowed to create an iTunes account" appears, but my account was successfully added in the sandbox. I tried two different email suffixes @gmail.com and @tester.com, and both showed this prompt. The developers in the team were also unable to solve this problem. Does anyone know how to deal with this situation?
Replies
1
Boosts
0
Views
194
Activity
Jun ’25
Struggling with getting access to testflight
I’m running into an issue with TestFlight and would appreciate any help or insight. A developer previously sent a TestFlight invite to my email address, which I accessed on a different iPhone (my girlfriend’s), as I was using a non-iOS device at the time. The app installed and worked fine on that device. Now that I have my own iPhone and have downloaded the TestFlight app, I can’t access the invite or app under my own Apple ID. The developer has tried to resend the invite to the same email, but I’m not receiving anything — no email, no app showing in TestFlight. We also tried: Reopening the original invite email on my new iPhone Reinstalling TestFlight Checking for any spam/junk mail Confirming the correct Apple ID is used Nothing has worked so far. Is there a way to: Reset or revoke my original TestFlight tester status? Ensure a fresh invite can be sent and received? Link the original invite to my current Apple ID and device? Appreciate any advice — thanks in advance
Replies
0
Boosts
0
Views
191
Activity
Jun ’25
TestFlight App Clip always display white card with "This app clip is not currently available in your country or region" error.
Hi, I have uploaded the Main App with App Clip to Apple Store Connect and launch in TestFlight. But at first build I wrote wrong App Clip's associated domains in the App build target ,and also mistakes in the AASA file. Then I correct it like appclips:com.***.***.AppClip in both places. However, I tried many uploaded version and it still display "The app clip in not currently available... " error. The domain is successfully verified in App Store Connect and the test version can dowloaded to device for testing. Only that it can't show the right Card as expected. I want to ask if I set the wrong domain in the beginning few builds, and correct it later. Will it work again or not? Moreover, the tester email is not the same as apple id for tester's mobile phone. I have corrected it . I don't know will it affect the result ,and maybe something have stored in Apple backend server for testflight data and need to be refresh to make it work. Thanks and please advise. Best regards Sunny.
Replies
6
Boosts
1
Views
226
Activity
Jun ’25
testflight
how many devices can be deleted in one week in testflight? and can it be deleted every Monday or a week after the device is registered?
Replies
0
Boosts
0
Views
102
Activity
Jun ’25
[Open Beta] Endless Zombies – Roguelike Action Shooter (iOS)
App Name: Endless Zombies Platform: iOS Genre: Roguelike / Survival / Action TestFlight Link: https://testflight.apple.com/join/DEIN-CODE Status: Open Beta – limited seats available 🎮 What is Endless Zombies? Endless Zombies is a fast-paced, top-down roguelike shooter where you must survive increasingly intense zombie waves — with fully separated movement and aiming controls for maximum precision and tactical depth. Players can upgrade their weapons, unleash special attacks, and face progressively stronger threats including Baby Waves (fast mini-zombies) and Boss Battles against giant elite enemies with unique behavior. This is not just about survival — climb the global leaderboard and fight your way to the top! 🏆 Compete for high scores, dominate the kill count, and earn bragging rights (and potential rewards in future tournaments). Endless Zombies is currently in its first public beta and we’re looking for players who want to help us improve mechanics, test new systems, and shape the final experience. 🧪 Looking for beta testers to: Test gameplay fluidity and aiming responsiveness Evaluate performance on different iOS devices Provide feedback on UI, game balance, and spawn pacing Report bugs and edge-case issues 🚀 Features: 🎯 Dual control movement + aiming 🧠 Smarter, optimized enemy spawn logic ⚔️ Upgradeable weapons and energy system 👥 Online friends chat and leaderboard system (PlayFab-based) 📊 Stats, progress tracking, and UI improvements Join via TestFlight: 👉 https://testflight.apple.com/join/DEIN-CODE We’d love to hear what you think!
Replies
1
Boosts
0
Views
375
Activity
Jun ’25
Proper way to detect TestFlight builds in iOS 18
I used to detect TestFlight builds prior to iOS 18 by the bundleReceiptURL like this. The deprecation message points to AppTransaction instead of using receipts directly, but that does not help with my use case here. What is the proper way to detect a TestFlight build now?
Replies
0
Boosts
1
Views
113
Activity
Jul ’25
Safari Extension: 'Review in Safari' Button Not Appearing After Reinstall — TestFlight vs. App Store?
I'm developing a Safari extension and noticed that some extensions, when uninstalled and installed again, trigger the "Review in Safari" button to request permissions. However, when I uninstall and reinstall my own extension during development, I can't get Safari to show this button again. Could the reason be that the extensions showing the "Review in Safari" button are installed from the App Store, while my extension is distributed via TestFlight? Does the distribution method affect how Safari handles extension permissions after reinstalling?
Replies
0
Boosts
0
Views
145
Activity
Jul ’25
Invalid Characters in Info.plist File
ITMS-90328: Your package contains a file AppName.app/Info.plist /Users/admin with a name that contains invalid characters. Avoid using control characters in the file names. ITMS-90328: Your package contains a file AppName.app/Info.plist with a name that contains invalid characters. How do I resolve this issue? My Info.plist file has no control character
Replies
3
Boosts
0
Views
204
Activity
Jul ’25
XCode overwrites watch companion's Info.plist with invalid data
Hi developers. I've been working on a Watch companion app for my product these past few days, and I'm currently trying to push it to TestFlight. I get stuck at the validation step with endless errors. The first one typically is missing WKApplication in Info.plist. That's fine, I'll add the field in Watch target > Info. Now more errors appear: Invalid UIDeviceFamily value of '1' and '2' Unsupported key UIRequiredDeviceCapabilities DTPlatformName value invalid Missing architecture, the bundle must contain arm64_32 because it's built with watchOS SDK 5+ I never set these values in the Info tab, so my guess is they're being overwritten by the Runner Build Settings, even though watch target build settings are correct (for example, Targeted Device Family is set to Apple Watch). What I've tried so far: Disabling auto generation of the Info.plist, and manually setting UIDeviceFamily to '4', but that doesn't help, unless I do it after creating the archive by editing the archive files and resending it to validation. I also tried a bunch of other post-build modifications to try and fix all the errors but new ones kept popping up. Cleaning Build Folder and DerivedData, restarting XCode, rebooting the computer... no effect, which is expected given that the building process doesn't return any errors Validating just the app without the apple watch (so from my main branch), still works as expected. Recreating a blank watchOS target and trying to validate just that, I get stuck in the same way. Project details: XCode Version 16.3 (16E140) Flutter 3.27.3 Targeting latest watchOS and iOS 16+ Do you have an idea what could be the problem here ? I'm sure it's just a missing or invalid property in some configuration file, but I can't figure it out and there are no resources online documenting the issue, and no "tutorials" on how to properly set up a watch target from Apple. Thank you for your time. A.H.
Replies
0
Boosts
0
Views
253
Activity
Jul ’25