itunes connect - beta entitlement missing error - ios

I create a new App Store Distribution profile containing the beta entitlement to distribute builds via TestFlight, I create my application based on new profile that was contain beta entitlement, when I submit my application I got this error:
Generate a new App Store Distribution profile containing the beta
entitlement to distribute builds via TestFlight
Here is my provision profile:
<key>Entitlements</key>
<dict>
<key>keychain-access-groups</key>
<array>
<string>XXXXXXX.*</string>
</array>
<key>get-task-allow</key>
<false/>
<key>application-identifier</key>
<string>XXXXXXX.my.companyname.test</string>
<key>com.apple.developer.team-identifier</key>
<string>XXXXXXX</string>
<key>beta-reports-active</key>
<true/>
</dict>
I have "beta-reports-active" in my build, I do not know why I got this error I regenerate everything, does apple change/add something to the submission process/test-flight after 1 February without announcement?
Does anyone knows what is the problem?
Thanks in advance

I fixed this issue by additionally adding the beta-reports-active key to my Target's Entitlements.plist file in the Xcode project.
Apple TestFlight upload warning ITMS-90191: missing `beta-reports-active` entitlement
The beta-reports-active key must be added to the Provisioning Profile AND to the Target's entitlements.
TargetName.entitlements:
<?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>beta-reports-active</key>
<true/>
// ...
</dict>
</plist>
After adding the entitlement to my Target, I'm able to successfully upload the build to iTunes Connect TestFlight without the ITMS-90191 warning:

I'm using Xcode 9 and Swift 4
I also faced same issue when I try to create ipa file for my swift project. I search a lot but could not find any good solution. But finally my senior helped me same way as pkamb said in his comment, adding key "beta-reports-active" in your projectName.entitlements file will solve your problem. Open projectName.entitlements file as source code and edit it as follows.
My projectName.entitlements file looks like this
<?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>beta-reports-active</key>
</dict>
</plist>
I just added key :- beta-reports-active as shown above.

Xcode 10: you must not add the beta-reports-active manually to entitlements if you want to use Xcode automatic signing.

Related

Parse error in plist when I add associated-domains key into Entitlement.plist

I'm using xamarin to build an application and I need to add my domains into Entitlement.plist for allowing me to have deep links, but when delivering app to Apple's app store, the deliver fails with a message like "parse error in plist: ."
This is my Entitlement.plist:
<?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>aps-environment</key>
<string>development</string>
<!--facebook needed-->
<key>keychain-access-groups</key>
<array>
<string>X0XX000XXX.com.Bundle</string>
</array>
<!--end facebook needed-->
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:domain.com</string>
<string>applinks:www.domain.com</string>
</array>
</dict>
</plist>
If I remove the key com.apple.developer.associated-domains and its array, everything works fine again. What I'm doing wrong?
This probably was due to no provisioning license found. Created apple developer account and setup app id and provisioning profile. In Xcode you had to download the profile too. Then you have to match the bundle identifier to the app id and assigned the identity too.
More information you can refer to this: https://learn.microsoft.com/en-us/xamarin/ios/deploy-test/provisioning/entitlements?tabs=windows

How to get local path in bitrise

I have an iOS project in bitrise in which I have set manually manage signing.
So I have to provide my certificate in bitrise code signing section.
I put my certificate and provisioning profile in each subsection and now I have to provide the path from which me workflow step will take these certificates.
The step I use is the Certificate and profile installer
This is what it says:
URL of the certificate to download. Multiple URLs can be specified,
separated by a pipe (|) character.
You can specify a local path as well, using the file:// scheme. For
example file://./Cert.p12
In my case I want to take the local path but whatever I tried didn't work
(for example I tried with file://cert_id or file://cert_id.mobileprovision or file://cert_name etc)
Note: I don't want to do it via GENERIC FILE STORAGE.
Thank you in advance
As bitrise support helped me you cannot take the path like this.
My problem started when I had to provide more than one profile and certificate as I had more than one target and bitrise support up to 5 generic files.
So the answer is:
First of all upload all of your provisioning profiles (ad-hoc development appstore enterprise, if you will use one you can upload just one) in code signing section (you don't need anything in generic file storage).
Then add only one certificate and profile installer step and don't change anything.
Finally in Xcode Archive & Export for iOS step you have to navigate in Debug section and add a value in Custom export options plist content (this can be found when you archive and export an ipa locally in your machine by opening ExportOptions.plist file).
This is a sample of the value you will have to put:
<?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>destination</key>
<string>export</string>
<key>method</key>
<string>app-store</string>
<key>provisioningProfiles</key>
<dict>
<key>bundleID</key>
<string>bundleID-provisioning profile</string>
<key>target-bundleID</key>
<string>target-bundleID-provisioning profile</string>
<key>target2-bundleID</key>
<string>target2-bundleID-provisioning profile</string>
</dict>
<key>signingCertificate</key>
<string>Apple Distribution</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>yourTeamID</string>
<key>uploadBitcode</key>
<true/>
<key>uploadSymbols</key>
<true/>
</dict>
</plist>

ERROR ITMS-90046: value 'Development' for key 'com.apple.developer.icloud-container-environment' is not supported

I'm getting the following error:
ERROR ITMS-90046: "Invalid Code Signing Entitlements. Your application bundle's signature contains code signing entitlements that are not supported on iOS. Specifically, value 'Development' for key 'com.apple.developer.icloud-container-environment' in 'Payload/AppName.iOS.app/AppName.iOS' is not supported."
"Development" isn't even in the entitlements.plist. There is the name of the iCloud certification though in an array of strings (this worked on the previous upload, I don't know what caused it to break). I've also tried deleting all certifications and provisions and redoing them. no change.
I've also tried the following to no avail:
ERROR ITMS-90164/90046: Invalid Code Signing Entitlements
https://forums.xamarin.com/discussion/48831/tinyurl.com/oqbw7ra
https://forums.xamarin.com/discussion/58051/ios-entitlement-error-90046
Suggestions?
EDIT:
<?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>com.apple.developer.networking.wifi-info</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.PrivateAppName</string>
</array>
<key>com.apple.developer.icloud-container-identifiers</key>
<array>
<string>iCloud.com.PrivateAppName</string>
</array>
<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
</dict>
</plist>
Ended up removing the iCloud as I found a way to not use it. I used secure-storage and preferences instead. Note that the keys used to store them must contain the app identifier, for whatever reason, otherwise it doesn't always pick it up from the device (phone, tablet, etc).

iOS deployment fails with invalid entitlements - but entitlements are valid?

My colleague has made some changes recently to our app, and enabled Data Protection.
However, ever since, we're unable to deploy the app to any real device. The error happens at application verification with this error:
ApplicationVerificationFailed: Failed to verify code signature of /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.YDQn6e/extracted/[appname].app : 0xe8008016 (The executable was signed with invalid entitlements.)
(Due to NDA requirements I have to hide any identifying information from any logs, and such, I replaced them with static labels in [] brackets).
I've checked the entitlements using Apple's own guide, using the security and codesign tools.
codesign output the following information:
<?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>get-task-allow</key>
<false/>
<key>application-identifier</key>
<string>[teamId].[appname]</string>
<key>com.apple.developer.team-identifier</key>
<string>[teamId]</string>
<key>aps-environment</key>
<string>production</string>
<key>keychain-access-groups</key>
<array>
<string>[teamId].[appname]</string>
</array>
</dict>
</plist>
And here is the output of the security command:
<?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>AppIDName</key>
<string>[appPublicName]</string>
<key>ApplicationIdentifierPrefix</key>
<array>
<string>[teamId]</string>
</array>
<key>CreationDate</key>
<date>2017-07-06T11:55:52Z</date>
<key>Platform</key>
<array>
<string>iOS</string>
</array>
<key>DeveloperCertificates</key>
<array>
<data>[devCert]</data>
</array>
<key>Entitlements</key>
<dict>
<key>keychain-access-groups</key>
<array>
<string>[teamId].*</string>
</array>
<key>get-task-allow</key>
<false/>
<key>application-identifier</key>
<string>[teamId].[appname]</string>
<key>com.apple.developer.associated-domains</key>
<string>*</string>
<key>com.apple.developer.team-identifier</key>
<string>[teamId]</string>
<key>aps-environment</key>
<string>production</string>
</dict>
<key>ExpirationDate</key>
<date>2018-04-25T13:18:41Z</date>
<key>Name</key>
<string>[appPublicName]</string>
<key>ProvisionedDevices</key>
<array>
[provisioned devices]
[The device I'm trying to deploy to is listed here]
</array>
<key>TeamIdentifier</key>
<array>
<string>[teamId]</string>
</array>
<key>TeamName</key>
<string>[teamName]</string>
<key>TimeToLive</key>
<integer>293</integer>
<key>UUID</key>
<string>[id]</string>
<key>Version</key>
<integer>1</integer>
</dict>
</plist>
What on earth is going wrong here?
Updating entitlements in an iOS app requires a couple of steps if you are not using automatic code signing. You need to update both the application's project and the provisioning profile used to build the app. If the two are out of sync (or more precisely, if your app is trying to use an entitlement not allowed by the provisioning profile's allowed entitlements, you will get this error.
When changing entitlements, you need to update the entitlements in the project itself (as documented here) as well as in the provisioning profile. I suspect this is all you have done so far.
To update the entitlements in your provisioning profile, log into the Apple developer site and go to the "Certificates, Identifiers & Profiles" section. Select Application IDs on the left, and find the app ID for the app you are trying to build. Click the edit button and turn on the entitlement for Data Protection. Once you have done this, click "Done". The App ID is now configured, but you'll need to regenerate your provisioning profile to pick up the changes to your app ID. Go to the Provisioning Profiles link on the left, find your profile for the app ID, click Edit, then click the Generate button at the bottom. Once done, click the download button to get the new profile that has the new entitlements for the App ID.
Also, just to be safe, I would delete all your old provisioning profiles from the Mac before downloading and installing the new one. That way you can be sure it is picking up the correct provisioning profile. You can find the location of the provisioning profiles here.

Modifying entitlement files created by IBM MobileFirst 7.1 for a hybrid iOS App

I have a project using IBM MobileFirst 7.1 with a Hybrid application deployed for iOS.
In this same Hybrid application, we are using some other native iOS SDKs that uses Keychain. We had encountered an issue with the other SDK, that was resolved by modifying the entitlement plist files.
We want to know if it is safe or not to modify Entitlements-Debug.plist and Entitlements-Release.plist files, and if modifying these files can have any impact on the IBM MobileFirst application.
The modification we were asked to do is to add The bundle seed ID on keychain-access-groups (something like 5F537T7102.*)
The old file was having the following content:
<?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>application-identifier</key>
<string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)worklight.group</string>
</array>
</dict>
</plist>
The new file is having the following content:
<?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>application-identifier</key>
<string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
<key>keychain-access-groups</key>
<array>
<string>5F537T7102.*</string>
</array>
</dict>
</plist>
Is this modification safe and will not have any drawbacks on the application?
By default, MobileFirst applications are part of the worklight.group access group that is defined in the entitlement property file in order to support feature called Simple Data Sharing.
If you are using Simple Data Sharing feature, then your modification may affect the feature else you are good to go.
More information about the Simple Data Sharing feature for iOS Native Applications can be found here.

Resources