【问题标题】:Xcode: Could not launch app on updateXcode:更新时无法启动应用程序
【发布时间】:2012-08-04 17:11:53
【问题描述】:

各位程序员,

我的 iPhone 应用程序 1.0 版已经在 App Store 中,所以在该版本中一切正常。

目前我正在处理更新,版本 2.0。好吧,如果我将此版本作为一个全新的应用程序安装在 iPhone 上,它会运行得非常好。应用启动时没有问题或运行时出现任何其他错误。

但现在的问题是:如果我已经安装了 1.0 版,然后尝试使用 2.0 版更新应用程序(在 Xcode 中以调试模式构建和运行),应用程序会在启动时立即崩溃。这非常令人困惑,因为如果将它们构建为独立的应用程序,这两个版本都可以很好地工作。 另一个有趣的方面是该更新适用于 iOS 模拟器,但不适用于设备。

在设备上运行更新,我收到以下错误之一(错误并不总是相同):

  • 获取进程xxxx的任务失败
  • 等待应用启动超时

我的开发环境的其他信息:我在 OS X Mountain Lion 10.8 上使用 Xcode 4.4。我的 iPhone 上的操作系统是 iOS 5.1.1。

我发现崩溃是在调用 application:didFinishLaunchingWithOptions: 之前引起的,所以我的实际源代码不会导致问题。

对于那些仍然对didFinishLaunchingWithOptions 方法感兴趣的人:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //Navigation bar

    UIImage *navigationBackground = [[UIImage imageNamed:@"EMSNavigationBarBackground.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20, 0, 20)];
    [[UINavigationBar appearance] setBackgroundImage:navigationBackground forBarMetrics:UIBarMetricsDefault];

    [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-3.f forBarMetrics:UIBarMetricsDefault];

    //Normal button

    UIImage *button30 = [[UIImage imageNamed:@"EMSBarButtonItemNormal"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];
    UIImage *buttonHighlighted30 = [[UIImage imageNamed:@"EMSBarButtonItemPressed"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];
    [[UIBarButtonItem appearance] setBackgroundImage:button30 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundImage:buttonHighlighted30 forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundVerticalPositionAdjustment:-3.f forBarMetrics:UIBarMetricsDefault];

    //Back button

    UIImage *buttonBack30 = [[UIImage imageNamed:@"EMSBarButtonItemBackNormal"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 5)];
    UIImage *buttonBackHighlighted30 = [[UIImage imageNamed:@"EMSBarButtonItemBackPressed"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 5)];

    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:buttonBack30 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:buttonBackHighlighted30 forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackButtonBackgroundVerticalPositionAdjustment:-3.f forBarMetrics:UIBarMetricsDefault];


    return YES;
}

【问题讨论】:

  • 在更新时崩溃的一种方法是:保存一些默认值,然后在下一个版本中更改在应用程序启动时检查这些值的方式(例如,检查一些值以了解哪个视图呈现,或类似的)。示例:在以前的版本中,在应用程序启动时,您正在检查保存在 NSUserDefaults 中的对象的键 @"is_user_logged_in",然后在下一个版本中,您使用键 @"is_logged_in",因此在以前的版本中没有这样的对象“新”键,你的逻辑是错误的。好吧,这不是最好的例子,但请考虑一下。干杯
  • 完全如上 - 文档文件夹或默认设置中存在一些问题,会混淆您的更新。您是否使用了 Core Data 然后更改了模型?
  • 是的,我在更新中使用带有新模型版本的 Core Data,但我认为这不会导致问题,因为模型迁移在 iOS 模拟器中运行良好。这真的只是设备上的一个问题。
  • @TeodorCarstea 我发布了 didFinishLaunchingWithOptions 方法。但是该方法甚至没有被调用,所以它不会导致崩溃。
  • @JackHumphries 不,我不使用 App Store 版本。我在调试模式下构建并运行这两个版本。

标签: iphone ios xcode cocoa-touch


【解决方案1】:

我遇到了完全相同的问题。问题原来是我为同一个应用程序的新版本创建了一个不同名称的新项目。将项目名称改回以前版本中的名称,问题就解决了!也许您的项目也是如此?您可以按如下方式编辑项目名称:

  1. 在您的新项目中,选择您的目标
  2. 在右侧的实用程序窗格中,选择“文件检查器” 标签
  3. 在身份窗格中更改项目名称,这将打开一个 新窗口将帮助您重构项目

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    我有一些类似的问题。当我在安装以前的版本时第一次运行我的应用程序时,出现“等待应用程序启动超时”错误,但 Xcode 第二次启动应用程序时没有问题。事实证明,原因是我更改了目标的产品名称(选择目标,然后在构建设置选项卡上为产品名称设置值)。但是,当我将应用程序存档并使用 iTunes 安装在设备上时,它会以新名称正常启动,因此问题似乎出在 Xcode 中。

    【讨论】:

      猜你喜欢
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 2016-06-22
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      相关资源
      最近更新 更多