iOS 审核被拒原因记录 (TESTFLIGHT 测试闪退)

错误提示

We were unable to review your app as it crashed on launch. We have attached detailed crash logs to help troubleshoot this issue.
Next Steps
To resolve this issue, please revise your too and test it on a device to ensure it will launch without crashing.

找到突破口

测试半天,最后使用TESTFILGHT 预先测试版本。最终发现问题,用TESTFLIGHT打开APP的时候直接闪退.

分析原因

– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

当应用程序启动时执行,应用程序启动入口。只在应用程序启动时执行一次。application参数用来获取应用程序的状态、变量等,值得注意的是字典参数:(NSDictionary *)launchOptions,该参数存储程序启动的原因.

  • 若用户直接启动,lauchOptions内无数据;
  • 若由其他应用程序通过openURL:启动,则 UIApplicationLaunchOptionsURLKey 对应的对象为启动URL (NSURL), UIApplicationLaunchOptionsSourceApplicationKey 对应启动的源应用程序的 bundle ID (NSString);
  • 若由本地通知启动,则UIApplicationLaunchOptionsLocalNotificationKey对应的是为启动应用程序的的本地通知对象(UILocalNotification);
  • 若由远程通知启动,则UIApplicationLaunchOptionsRemoteNotificationKey 对应的是启动应用程序的的远程通知信息userInfo(NSDictionary);
  • 其他key还有
    UIApplicationLaunchOptionsAnnotationKey,
    UIApplicationLaunchOptionsLocationKey,
    UIApplicationLaunchOptionsNewsstandDownloadsKey。
    如果要在启动时,做出一些区分,那就需要在下面的代码做处理。 比如:应用可以被某个其它应用调起(作为该应用的子应用),要实现单点登录,那就需要在启动代码的地方做出合理的验证,并跳过登录。
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSURL *url = [options objectForKey:UIApplicationLaunchOptionsURLKey];
    if(url){
    }
    NSString *bundleId = [options objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];
    if(bundleId){
    }
    UILocalNotification * localNotify = [options objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if(localNotify){
    }
    NSDictionary * userInfo = [options objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if(userInfo){
    }
}

原因: 当你用第三方打开APP的时候,应用程序通过OPENURL:启动 didFinishLaunchingWithOptions方法。

你可能感兴趣的:(iOS 审核被拒原因记录 (TESTFLIGHT 测试闪退))