我一直在努力创建一个简单的iOS应用程序,可以接收推送通知.我这样做的唯一原因是为其他团队成员建立一个程序,并且无法在网络上的其他地方找到这些指令的最新工作版本.我们的商店对于iOS开发者来说相当新,我个人对iOS开发和Xcode完全缺乏经验.我偶然发现了Apple和其他地方的数十篇教程,文章和问题帖子,我觉得我可能差不多......
这是我必须去的地方(请注意我正在使用Xcode 4.3并尝试最初部署到iOS 5.1,并且我认为最近有些事情可能与早期版本的Xcode有所改变,但我再次对所有人都是新手这 - 并且发现它完全令人困惑和错综复杂):
1)我的iPhone上有配置文件,启用了Push功能
2)在我的测试Xcode项目中,我已选择配置文件作为签名标识(在Build Settings> Code Signing中)

3)我已在"摘要和信息">"自定义iOS目标属性"下正确设置了我的包标识符*(我认为??)
4)我已经在我的委托的didFinishLaunchingWithOptions中调用了registerForRemoteNotificationTypes
5)我的委托中有didRegisterForRemoteNotificationsWithDeviceToken和didFailToRegisterForRemoteNotificationsWithError,设置为分别记录设备令牌或错误
6)我在Summary下检查了Enable Entitlements.
7)在下面,选择的权利文件是Tinker6(我的测试项目的名称),当我选中启用权利时自动生成
8)在Tinker6.entitlements文件中,我得到了以下内容(我收集的内容基于网络上的几个不同帖子是正确的,但是我找不到Apple自己确定的任何内容):

更新
9)此外,我已经尝试了没有权利文件的整个事情,并获得了基本相同的结果.
10)我的mobileprovision文件内容包括正确的权利(我已经对数字和域进行了加扰,但结构相同):
<key>application-identifier</key>
<string>12355456A7.com.whatever.tinker</string>
<key>aps-environment</key>
<string>development</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>12355456A7.*</string>
</array>
Run Code Online (Sandbox Code Playgroud)
/结束更新
当我尝试在我的设备上运行它时,我在Xcode输出中收到以下错误:
2012-06-11 12:45:23.762 Tinker6[13332:707] Failed to get token, error:
Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment'
entitlement string found for application" UserInfo=0x24a3b0
{NSLocalizedDescription=no valid 'aps-environment' entitlement string
found for application}
Run Code Online (Sandbox Code Playgroud)
我已经尝试将get-task-allow设置为NO,aps-environment to production,所有四种可能的组合,同样的事情.
我怎么能通过这个?这方面的权威文件在哪里?
- 进一步的背景如下 -
*就bundle ID而言,我仍然不清楚如何在Provisioning配置文件中设置应用程序ID和配置文件ID.在App Ids下的Provisioning门户中,我有这个(再次,扰乱了数字和域):

并且两个地方捆绑id设置我有这个:

我完全不确定这些是否正确,或者是否应将其中一个或两个设置为12355456A7.com.whatever.tinker,尽管我在此过程中尝试过这些但没有成功...
注意我意识到有许多帖子具有相似的标题,但是它们似乎都是根据文件名和反过来给出的,并且事实上没有一个解决方案似乎有用.我希望我给出的更高水平的细节将保证质量响应.我可能会尽快分配奖金,如果你给出一个高质量的答案导致解决方案,我将奖励你的奖金,并通过推特和我的博客推广你的答案.特别是如果你发布一个非常好的crosspost帖子"这里有你需要的确切的 500步骤,以便在你的博客或其他任何东西上获得一个简单的推送通知应用程序,包括配置和其他任何"文章.
notifications push-notification apple-push-notifications ios
The entitlements specified in your application’s Code Signing Entitlements file do not match those specified in your provisioning profile.
(0xE8008016).尝试将我的第一个应用程序部署到iOS 4.2.6(Verizon)上的非越狱设备时,我遇到了"可怕的"错误.问题是,Entitlements file我的项目中没有,因为我根本没有分发它,只是把它放在一个设备上.我已经完成了苹果让你通过的所有箍和循环(证书,设备,配置)到字母,我无法弄清楚出了什么问题.
任何人都可以帮我解决这个问题吗?
iphone code-signing objective-c provisioning-profile code-signing-entitlements
在升级到iPhone OS 3.1和Xcode 3.2之前,我有一个完全正常工作的构建环境.现在,当我尝试进行构建时,我得到以下内容:
代码签名错误:供应配置文件'FooApp test'指定应用程序标识符'no.fooapp.iphoneapp',它与当前设置'TGECMYZ3VK.no.fooapp.iphoneapp'不匹配
问题是Xcode以某种方式设法认为"FooApp Test"配置文件指定了应用程序标识符"no.fooapp.iphoneapp",但事实并非如此.
在管理器(以及iPhone开发人员门户网站)中,应用程序标识符被正确地视为"TGECMYZ3VK.no.fooapp.iphoneapp".
此外,在项目级别的构建选项中设置供应配置文件时,Xcode会正确识别应用程序标识符,但是当我转到目标时,我无法选择任何有效的供应配置文件.
什么可能导致这个问题?
更新:我试图创建一个新的配置文件,但仍然没有运气.我还尝试将Info.plist中标识的应用程序更改为"no.fooapp.iphoneapp".构建成功,但现在我收到组织者的错误:
可执行文件使用无效的权利进行签名.应用程序的代码签名权利文件中指定的权利与您的供应配置文件中指定的权利不匹配.(0xE8008016).
这似乎是合理的,因为配置文件仍然具有"TGECMYZ3VK.no.fooapp.iphoneapp"应用程序标识符.
我还仔细检查了所有证书在钥匙串中的有效性.
所以我的问题是如何让Xcode看到正确的应用程序标识符?
更新:如下所述,似乎解决了问题的是删除所有配置文件,证书等,制作新证书/配置文件并重新安装它们.如果有人有任何其他解决方案,他们将是受欢迎的.:)
假设我在XCode构建设置中有一个iPhone应用程序,其产品名称是" 我的应用程序 "(在单词之间有空格).在我的info.plist中,Bundle标识符被指定为com.mycompany.${PRODUCT_NAME:rfc1034identifier}
在应用程序包中生成的info.plist中,包标识符显示为com.mycompany.My-App.我需要它com.mycompany.MyApp.如何更改Bundle Identifier设置,以便按照我想要的方式转换产品名称?
PS.如果我更改为${PRODUCT_NAME:rfc1034identifier}to ${PRODUCT_NAME:identifier},则生成的包标识符将是com.mycompany.My_App.我只需要在结果中完全删除产品名称中的空格字符.
我在我的应用中设置了推送通知.我正在尝试确定我在application:didRegisterForRemoteNotificationsWithDeviceToken:方法中从APNS收到的设备令牌是来自沙箱还是开发环境.如果我可以区分哪个环境初始化了令牌,我将能够告诉我的服务器向哪个环境发送推送通知.
我已经尝试使用DEBUG宏来确定这一点,但我已经看到了一些奇怪的行为,并且不相信它是100%正确的.
#ifdef DEBUG
BOOL isProd = YES;
#else
BOOL isProd = NO;
#endif
Run Code Online (Sandbox Code Playgroud)
理想情况下,我可以aps-environment在代码中检查权利(值是开发或生产),但我不确定这是否可行.
确定您的应用是否正在与APNS沙箱或生产环境进行通信的正确方法是什么?我假设服务器首先需要知道这一点.如果假设不正确,请纠正我.
编辑:Apple关于提供商与APNS通信的文档详细说明了与沙箱进行通信和生产之间的区别.但是,文档未提供有关如何与注册令牌(来自iOS客户端应用程序)以及与服务器通信一致的信息.
我想我的脑袋很快会爆炸.我已经在我的应用程序上工作了一段时间,最后git一个iPhone在设备上进行测试,现在我正在尝试在iphone上运行我的应用程序,但不能这样做.我已经完成了所有必要的步骤但却出错了
[BEROR]Code Sign error: a valid provisioning profile matching the application's Identifier 'com.yourcompany.MyProject' could not be found
我的预配置配置文件被调用 XXXXXXXXX.com.myname.*
在info.plist中我将Bundle标识符更改为 com.myname.myapplication
我的项目名称是MyProject,因为我无法更改它,但我的目标和可执行文件被调用 myapplication
我检查了所有设置,甚至无法yourcompany在任何地方找到它
但仍然得到这个错误
我需要在哪里寻求?
谢谢
我已经尝试了链接http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12中的示例,以获取我的iPhone推送通知消息.我可以成功运行除第一次注册推送通知应用程序的步骤之外的所有步骤.
我遵循了不同的代码变体:
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
Run Code Online (Sandbox Code Playgroud)
但没有一个对我有用.我在我的iPhone 4中测试它,我的Xode版本是4.2,操作系统是Lion.请指教.
我将用户名,密码和devicetoken的值发布到.net webservice.但它没有获得任何设备令牌值.我正在使用下面的代码.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert ];
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken: %@", deviceToken);
NSString *dt = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
dt = [dt stringByReplacingOccurrencesOfString:@" " withString:@""];
self.DeviceToken=dt;
NSLog(@"~~~~devToken(dv)=%@",deviceToken);
}
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
NSLog(@"Failed to get token, error: %@", error);
}
Run Code Online (Sandbox Code Playgroud)
但在控制台中显示
无法获得令牌,错误:错误Domain = NSCocoaErrorDomain Code = 3000"找不到应用程序的有效'aps-environment'权利字符串"UserInfo = 0x1a0810 {NSLocalizedDescription =找不到应用程序的有效'aps-environment'权利字符串
任何的想法?提前致谢!