【问题标题】:Change app's name cause crash on launch更改应用名称会导致启动时崩溃
【发布时间】:2015-08-14 14:04:40
【问题描述】:

我最近在

中将我的应用名称从 ABCXYZ 更改为 ABC-XYZ
info.plist -> Bundle Display Name

这会导致设备在启动时崩溃。这是唯一的消息:

DiskCookieStorage changing policy from 2 to 0, cookie file:
file:///private/var/mobile/Containers/Data/Application/7CB9B0EA-97A2-4D3E-A8AA-CEB419BEB1F2/Library/Cookies/Cookies.binarycookies

模拟器工作正常,只有真正的设备崩溃。这里有什么问题?更新appstore会崩溃吗?

编辑 1:在我更改应用名称之前,一切都运行良好。我会尝试改回名字,看看问题是否消失。

编辑 2:不,即使我改回名称后它也不起作用。我现在该怎么办?

编辑 3:我只更改应用程序的显示名称,而不是项目名称或其他任何内容。我的项目名称仍然是 ABCXYZ-iPad。我认为问题可能是因为我导入了太多的外部框架、sdk...并且它在某处引起了冲突?

编辑 4:这些是我迄今为止尝试过的所有解决方案。还没有结果。

0. Rename to its old name, reinstall.
1. Clean, build, reset xcode, clean, build.
2. Delete app on device, reinstall.
3. Re-download from store, reinstall.
4. Reset device, reinstall.

编辑 5:我刚刚发现我的应用程序通过了这行代码。

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    NSLog(@"background fetch");
    completionHandler(UIBackgroundFetchResultNewData);
}

然后写出上面的信息。不过不知道是什么意思。

编辑 6:找到导致崩溃的确切位置! 非常感谢 Nicholas Langley,这里打印的问题:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Stripe Payment
    [Stripe setDefaultPublishableKey:StripePublishableKey];
    // iZettle Payment
    [[iZettleSDK shared] startWithAPIKey:@"THE_API_KEY"];

我更改了我的应用名称,导致它更改了捆绑包。调试后,它会在该行代码(startWithAPIKey)之后打印出消息,并在我尝试执行此操作时崩溃:

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
NSString *x = [[NSUserDefaults standardUserDefaults] objectForKey:@"X"];
[dic setObject:x forKey@"X"]; <<< HERE ERROR SETTING NIL. STRANGE because it doesn't print any message. Also, My app should store X already.

好像改了app的名字后,也改了bundle,导致数据丢失。现在真正的问题是:如何在更改应用程序的名称/捆绑包后使用新数据迁移旧数据。模拟器不会产生这个错误,我无法调试到设备的目录来检查任何东西。

编辑 7:突然解决!

更新应用后:

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
NSString *x = [[NSUserDefaults standardUserDefaults] objectForKey:@"X"];
if (x) {
    [dic setObject:x forKey@"X"];
}

然后重新安装,它崩溃了几次,然后又正常工作了。我什至多次更改应用程序的名称,再次没有出现问题。如果用户下载和升级应用程序,我真的担心如果将应用程序更新到商店会导致崩溃。

编辑 8:从商店升级进行测试。 我只是从商店旧版本重新下载。然后升级到新版本(不更改应用程序的名称)。然后更改应用程序的名称。不会出现问题。问题就这么消失了,就像做梦一样......我什至不知道该怎么办。这个模因对我来说绝对正确!好的,感谢所有花时间阅读这篇长文的人。

【问题讨论】:

  • 奇怪!我已经重命名了我的演示应用程序 2-3 次,但到目前为止没有发生任何崩溃。有什么具体的步骤或改变来重新制作吗?我也搜索了这个主题,它指出了 safari cookie 清除问题。如果您找到任何解决方案或重新制作它的方法,请告诉我。
  • 你看,我所做的只是更改了应用名称。说实话,我也对代码做了一些更改。但这不是问题,因为应用程序甚至还没有启动。好吧,我会更新这个问题。请参阅编辑 5。
  • 啊哈哈哈,不错的表情包! :)

标签: ios crash bundle rename launch


【解决方案1】:

构建您的项目 (cmd+b)。转到产品 > 清洁 (shift+cmd+k)。关闭 Xcode 找到项目目录即Desktop/ABC-XYZ 并通过双击 Xcode 项目文件打开项目。

【讨论】:

  • 对不起,不工作。我什至重置了真实设备,问题仍然存在。如果我必须让客户重置/重新安装整个应用程序,我真的很担心。这可能会导致他们的数据丢失。
  • "我认为问题可能是因为我导入了太多的外部框架、sdk...并且它在某处引起了冲突"您使用的是什么框架?
  • iZettle、authorize.net、崩溃报告器、libScanapi64、一些内置框架...我认为这不再是问题了 :(
  • 你在使用 Cordova 吗?
  • 不。我刚刚做了一些研究,发现科尔多瓦会导致类似的错误。但我不使用 Cordova。
【解决方案2】:
  1. 关闭 Xcode 和所有编辑器。

  2. 复制您的项目文件夹。

  3. 创建一个新文件夹,例如Documents\Projects\Proj_1.

  4. 将您的项目文件粘贴到此处。

  5. 打开 Xcode,清理解决方案并尝试重新安装到您的设备。

也许问题出在您的硬盘上。我的变体改变了你的文件的位置,这改变了你硬盘中项目文件的地址。

【讨论】:

    猜你喜欢
    • 2011-09-24
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2018-12-08
    相关资源
    最近更新 更多