使用 Xcode 5.0 升级到 UrbanAirship 3.0.0,调用此代码时出现错误:
[UAirship takeOff:config];
错误是
+[NSJSONSerialization stringWithObject:]: unrecognized selector sent to class 0x3b2ca9fc
2013-09-19 15:02:31.981 [178:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSJSONSerialization stringWithObject:]: unrecognized selector sent to class 0x3b2ca9fc'
当在
AirshipConfig.plist
中将键“inProduction”设置为“YES”时,这似乎不会出现,这在调用 takeOff: 填充 UAirShip 实例时有意义。
似乎是由于类别NSJSONSerialization+UAAdditions
。
这方面有什么帮助吗? 谢谢
要解决此问题,您必须在项目构建设置中找到的“其他链接器标志”中包含“-ObjC”标志。
UAirship 库 3.x 现在使用 Objective-C 类别,因此必须设置此标志以避免运行时异常。
有关问题的详细信息可以在这里找到:
https://developer.apple.com/library/mac/qa/qa1490/_index.html
更新了文档:
http://docs.urbanairship.com/build/ios.html#build-settings http://docs.urbanairship.com/topic_guides/ios_migration.html#linker-flags
您必须包含这两个库:
您必须针对各自的 iOS 使用任一库
在查看了不同的解决方案后,事实证明这解决了问题:
• 从 https://github.com/urbanairship/ios-library 下载源代码直接到您的应用程序文件夹中(不要使用其网站上提供的 .zip)
• 将 Airship 文件夹拖放到项目中(不要使用 AirshipLib 文件夹)
• 不要链接任何
libUAirship-3.0.0.a
或 libUAirship-iOS5-3.0.0.a
• 繁荣。它正在工作。
希望它能帮助其他一些长期以来寻求解决此问题的人。
补充一下,我的问题是我将
-ObjC
标志添加到 project
,并且应该将其添加到 target
设置中。
此外,如果无法编译,还有另一种选择
-Wl,-force_load,<PathToYourLib>/libUAirship-4.0.0.a
还应该添加到目标中。填写你的库的真实路径而不是
<PathToYourLib>
。
如果您使用cocoapods和Xcode 15, 在您的 Podfile 中添加/更新此内容以
platform :ios, '12.0'