iOS push notifications nightmares, Provisions app IDs and certificates - ios

Hey Apple developers,
I'm pulling my hair out trying to figure out how iOS provisioning profiles, certificates and app IDs work with push notifications. I thought I was close to getting this to work, but maybe not.
When I run my app and attempt to register push notifications, I get this error in the console:
2012-06-26 17:52:29.380 Grouped[1732:707] badgeNumber: 0
2012-06-26 17:52:30.089 Grouped[1732:707] [INFO] device is ready
2012-06-26 17:52:32.654 Grouped[1732:707] JSLOG: Registering with APNS via the App Delegate
2012-06-26 17:52:32.655 Grouped[1732:707] Register success callback set
2012-06-26 17:52:32.661 Grouped[1732:707] didFailToRegisterForRemoteNotificationsWithError:Error
Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' entitlement string found for
application" UserInfo=0x18a0c0 {NSLocalizedDescription=no valid 'aps-environment'
entitlement string found for application}
I've done several hours of research now and can't figure out what I'm doing wrong.
I've created a new provisioning profile that is linked to my app ID. I can see it on my phone.
Any ideas?
Bonus question: Why on earth is it so complicated to properly provision an iOS app for push notifications?

A couple things to check:
Do you have any other provisioning profiles for this app on your device? I'd delete them.
Does your App ID have push enabled in the provisioning portal?
Are you sure you're signing with the correct profile? It has to be a non-wildcard development certificate.
Are you specifying your own entitlements.plist file? Modern Xcode generates one, so you don't need to do this. Make sure your "Code Signing Entitlements" build setting is empty.
If you haven't already found it, Apple has a good FAQ about this:
http://developer.apple.com/library/ios/#technotes/tn2265/_index.html

"no valid 'aps-environment' entitlement string found for
application"
Your provision profile doesn't have push notifications enabled. Make sure you enabled them in the provisioning portal, generate a new profile, but more importantly make sure you actually installed it in Xcode and are signing your app with that profile. That last part has bitten me a couple times.

Be sure to create new adhoc/appstore profiles AFTER you created push certificates for your app. The distribution profiles change after enabling the App for push messages.

Related

Apple Development Xamarin.Forms: ERROR ITMS-90163 When Delivering App to TestFlight

So I created an iOS app in Xamarin.Forms and I want to send it to TestFlight to send for certain people to test. I am using the application Transporter to send the ipa file to TestFlight. The first time I did it, it was successfully sent however in TestFlight it was just hanging on processing forever, I got an email saying:
We identified one or more issues with a recent delivery for your app,
"My App Name" 1.3 (1.3). Please correct the following issues, then
upload again.
with this included:
ITMS-90078: Missing Push Notification Entitlement - Your app appears
to register with the Apple Push Notification service, but the app
signature's entitlements do not include the 'aps-environment'
entitlement. If your app uses the Apple Push Notification service,
make sure your App ID is enabled for Push Notification in the
Provisioning Portal, and resubmit after signing your app with a
Distribution provisioning profile that includes the 'aps-environment'
entitlement. Xcode does not automatically copy the aps-environment
entitlement from provisioning profiles at build time. This behavior is
intentional. To use this entitlement, either enable Push Notifications
in the project editor's Capabilities pane, or manually add the
entitlement to your entitlements file. For more information, see
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#//apple_ref/doc/uid/TP40008194-CH6-SW1.
So in my app in Entitlements.plist I enabled Push Notifications. And in https://developer.apple.com/ I enabled Push Notifications in my Identifiers which is used for my profile. I also add Application Identifier in Entitlements.plist with the value of TEAMID.com.myorganization.MyApp and now I get this error when trying to deliver the app to TestFlight:
ERROR ITMS-90163: "Invalid Code Signing Entitlements. The entitlements
in your app bundle signature do not match the ones that are contained
in the provisioning profile. The bundle contains a key that is not
included in the provisioning profile: 'aps-environment'
What does this error mean and how to do I fix it? It seems to me like I need to include the Application Identifier to my provisioning profile and I have no idea how to do that, can anyone help, I have been stuck on this for days and none of the solutions out there havent worked for me.
Thanks,

Testing Push Notifications, sharing app internally with coworkers

I've made a very basic app for push notifications using my personal ios developer account. I wanted to share this with a remote coworker but it's proving to be a struggle.
I added his device to my developer account, and I've created a new provisioning profile with his device for my app.
I sent him the certificate, and he ran it on his computer.. and then built the app on his phone. He got this error:
Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' entitlement string found for application" UserInfo=0x17007e880 {NSLocalizedDescription=no valid 'aps-environment' entitlement string found for application}
i had him check Xcode -> Preferences -> Accounts and this is his screen. I think he has an expired developer account, but can somehow still build apps on his phone??
he doesnt want to pay the $99. I'd add him as a developer on my "team" but I have an account as a single developer. What is the easiest way to get this working?
Here is the link that would help you build ipa that you can share with your coworker.
Or submit your build on iTunes connect and share it via test flight.
And one more thing you should keep in mind that as you mentioned that this app supports push notifications, i hope you have placed development or production SSL certificate on server which is necessary to send notifications from serve to device.

Push Notifications not received if Xcode Server signs with iOS Team provisioning profile

I recently implemented in an app Push Notifications. We also use an instance of Xcode Server to make automated builds for our QA.
When I updated the app id to support push notifications, I regenerated the provisioning profiles for both development and production.
I also enforced in the build settings to use the regenerated Dev prov. profile for debug builds and the Prod prov. profile for release builds.
But after this, the server didn't succeed to sign the archive anymore because for some reason, the server automatically creates a Team provisioning profile. I tried to force it somehow. I also tried to move prov. profiles in the folder where the server stores them. I also tried exporting/importing private keys. No success. I changed the build settings and went back to "automatic" rather than forcing a provisioning profile.
When I install a build from my local machine it signs with the manual prov. profile. And push notifications work.
If I install a build made with the server, it doesn't work. In the console here's the message:
SpringBoard[53] : No valid 'aps-environment' entitlement
string found for application 'myApp': (null). Notifications will not
be delivered.
When I take a look in the Apple Developer account, the provisioning profile used by the server says that IT HAS push notifications enabled. I can't edit it because it's managed by Xcode.
What to do?
Are you sure you updated also on server side the Certs? Looks like "current Provisioning Profile does not contain APNS information, as the Provisioning Profile is created BEFORE creating the APNS certificate." see here No valid 'aps-environment' entitlement string found for application on app store

iOS Push Notification Profile

I am currently working for a large client where things move slowly. I am in charge of fixing some issues for push notifications. When I run the app I get the following error:
didFailToRegisterForRemoteNotificationsWithError
Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' entitlement string found for application" UserInfo=0x1753edb0 {NSLocalizedDescription=no valid 'aps-environment' entitlement string found for application}
The problem happens because I am using a Xcode managed profile that does not have push notifications enabled. What are different ways of obtaining that profile which has push notifications enabled? Does the client have to add me as a developer in their Enterprise program?
If I obtain the provisioning profile file from the client I do not think it will work since I believe it needs to be attached to the certificate created on my machine! I may be wrong on this. Looking for different suggestions!
Ask your client to create the four certificates:
The Development
The Distribution
The Push Development
The Push Distribution
Install those on the OS X Keys, then export those certs into a .p12 file. Then get this file to your computer, install the certificates from the .p12 file, and then he can export the provisioning profiles to you and they will work in your computer like a charm!
I think this link will help him do what I said.

Push Notification IOS

I have this error:
Error: Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' entitlement string found for application" UserInfo=0x18cb70 {NSLocalizedDescription=no valid 'aps-environment' entitlement string found for application}
I can't figure this out. I did everything.I reinstalled the certificates a thousand times and this i still have this error.I have set aps-environment in the Entitlements.plist file.My Apple Development Push Certificate is in the keychain. The provisioning profiles has the push notification enabled. I have set the correct bundle. What can i do.I need solutions.Thanks.
One thing I've not seen in the answers to many of the APNS questions is:
If your project has multiple targets, make sure you are selecting the target you are RUNNING and changing the Code Signing Identity in that target !
Simple,
Delete the old provisioning profile and
Create a new provisioning file, after you enable push in the App ID.
This will work for sure.
I saw this once... here's what I did to fix it:
Click on your project (to access its settings)
Go to "Build Settings"
On "Code signing" select the exact profile you want to use
You should have a full AppId (not a wildcard one). If it's XXXXXX.*, you should create a new AppId so that it becomes XXXXXX.com.example.YourApp, generate a profile for it, and use it to sign your app.
Check below points before you build an application:
Open your provisional profile which you are using to build the app in TextEdit.
Make sure that provisional profile consists of key: "aps-environment". It can have 2 values i.e., "development" and "production" based upon the environment of the profile. If not then you have to make new provisional profile by adding APNS certificate to its AppId.
If the above things on place then try to build the app. Hope this helps.

Resources