我有一个使用Admob的应用。但由于我支持iOS 5及更高版本,我确保通过执行以下操作,不要在iOS 6以下的版本中调用Admob代码:
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_5_1) {
int j = 2;
j++; //This is just some code so I can use breakpoints for testing.
NSLog(@"Google Mobile Ads SDK version: %@", [GADRequest sdkVersion]); //Commenting out the line prevents the crash
}
我在iOS 5.1.1上测试。现在,如果我注释掉NSLog,那么应用程序可以正常运行。但如果我取消注释,应用程序几乎立即在主方法中崩溃:
int retVal = UIApplicationMain(argc,argv,nil,@" AppController");
我猜它在注释时没有崩溃,因为编译器"优化了"代码,因为它没有使用。但是,确保代码没有被使用的正确方法是什么,应用程序不会崩溃?
编辑:我编辑了代码,if块没有优化出来:
int j = 2;
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_5_1) {
j++; //This is just some code so I can use breakpoints for testing.
NSLog(@"Google Mobile Ads SDK version: %@", [GADRequest sdkVersion]); //Commenting out the line prevents the crash
}else{
j--;
}
NSLog(@"%d",j);
输出为" 1",因此else块中的代码执行。所以即使没有调用函数调用[GADRequest sdkVersion]
,它为什么会崩溃?同样,如果我注释掉函数调用,应用程序不会崩溃。
答案 0 :(得分:1)
与您所描述的内容一致的一种可能性是,链接到AdMob会导致崩溃。向代码中的GADRequest
课程发送消息会导致其链接到GADRequest
课程,而如果您没有,则无法链接到该课程。
为什么链接到AdMob导致崩溃?最有可能是因为AdMob链接到多个系统框架,其中一些可能不存在于iOS 5(例如AdSupport
框架)上,因此当它尝试在应用启动时动态链接到它们时,动态链接器崩溃。
我不确定你能做什么。也许您可以尝试明确链接到AdMob用作"可选"的系统框架。在Xcode? (我还没有测试过它。)
否则,您可以降级到支持iOS 5的AdMob版本(根据release notes,7之前的任何版本都应该这样做。)
答案 1 :(得分:-4)
我不知道它崩溃的原因 - 但不支持iOS 5.这是毫无意义的。 iOS市场分割类似于iOS7的80%,iOS8的80%。您无法购买iOS5手机,也无法安装或甚至发布应用程序。