swift 如果直接从Xcode上传,iOS应用程序将成功运行;如果从TestFlight更新,iOS应用程序将崩溃,

ruyhziif  于 2023-03-28  发布在  Swift
关注(0)|答案(2)|浏览(158)

我正在尝试上传一个应用程序到TestFlight。该应用程序在模拟器中编译和运行,如果我直接从Xcode安装它,也将在我的iPhone上运行。如果我将其存档并推送到TestFlight,然后从TestFlight更新我的设备,当我尝试查看特定的视图控制器时,应用程序崩溃。
我正在使用MessageKit(使用Cocoapods,因为这是我正在恢复的一个旧项目),导致应用崩溃的特定视图控制器扩展了MessagesViewController。TestFlight返回给我的错误消息如下:

“MessageKit:static UIColor.colorFromAssetBundle(named:)"

也许归档过程跳过了Xcode本地包含的Messagekit中的一个包?
任何对StackOverflow上类似错误的引用似乎都是超特定的:
iOS app runs fine if installed through Xcode, but crashes on one particular view controller when installed through TestFlight
在上面的用户的情况下,他们只是结束了重写viewController(这对我来说意味着删除和重写MessageKit)。
我认为这是一个归档过程中跳过文件的问题。如果是这种情况,任何关于如何调查的想法,或任何关于如何纠正这种情况的建议,将不胜感激。谢谢!

ukdjmx9f

ukdjmx9f1#

MessageKit中的UIColor和Bundle扩展中提供了以下代码:

UIColor+Extensions.swift

private static func colorFromAssetBundle(named: String) -> UIColor {
    guard let color = UIColor(named: named, in: Bundle.messageKitAssetBundle, compatibleWith: nil) else {
        fatalError(MessageKitError.couldNotFindColorAsset)
    }
    return color
}

static var incomingMessageBackground: UIColor { colorFromAssetBundle(named: "incomingMessageBackground")  }

Bundle+Extensions.swift

internal extension Bundle {
    #if IS_SPM
    static var messageKitAssetBundle: Bundle = Bundle.module
    #else
    static var messageKitAssetBundle: Bundle {
        return Bundle(for: MessagesViewController.self)
    }
    #endif
}

请确保您在这里有正确的MessagesViewController捆绑包,或者手动将assets files in MessageKit复制到项目的资产文件中。

wyyhbhjk

wyyhbhjk2#

解决方案:Coacopods是问题所在。我运行的是使用cocaopods发布的最新版本的Messagekit,这已经超过一年了。这意味着更新Pod永远不会起作用。我切换到了Swift包管理器,并拥有最新版本的Messagekit,一切都正常!感谢所有伸出援手的人。
参考:https://github.com/MessageKit/MessageKit/issues/1537

相关问题