Watchkit 扩展的嵌套框架问题

Posted

技术标签:

【中文标题】Watchkit 扩展的嵌套框架问题【英文标题】:Issue with nested Framework for Watchkit Extension 【发布时间】:2015-05-25 15:13:07 【问题描述】:

我的 Watchkit 应用无法在生产环境中运行(TestFlight && 被 AppStore 拒绝)。

我认为问题来自嵌套框架。这里的架构:

我用应用程序的模型制作了一个框架“ModelLayer”(Cocoa Touch Framework),因此它可以在所有目标之间共享。该框架使用另一个第三方框架(UICKeyChainStore.framework)。 而苹果手表扩展使用“ModelLayer”。

调试时一切正常。但是当我在 iTunes connect 上上传档案时,我遇到了一个错误,说不允许嵌套框架。所以我删除了我在“ModelLayer”目标的构建阶段中的复制文件阶段。应用被拒绝了,效果不好……

我在互联网上发现一些线程说复制文件阶段应该作为目标“共享框架”而不是“框架”(就像我之前所做的那样)。所以我尝试了这个,我在 iTunes Connect 上上传了我的应用程序的预发布版本,并使用 testflight 尝试了该应用程序。该应用程序现在在我的 Apple Watch 上,但无法加载该应用程序。加载程序停留在屏幕上。

我错过了什么吗?如何在我的“ModelLayer”框架中使用 UICKeyChainStore.framework ??

提前致谢!

【问题讨论】:

@rmp 我刚刚找到了解决方案,我的问题与钥匙串问题无关,因为我的应用程序在调试时正在工作。但感谢您的提示!我不知道钥匙串有一个可访问性参数,它解决了我在 WatchKit 应用程序中遇到的另一个错误。 明天我会回复我的问题。 太好了,很高兴它对您有所帮助,并且您的应用正在运行! 【参考方案1】:

所以我找到了解决方案。 我的自定义框架中的第三方框架不是问题。但这是我在手表套件扩展中的自定义框架。所以不可能在扩展中直接嵌入框架。该框架应嵌入主应用程序。并且扩展程序将能够使用它。

将框架添加到主应用目标

在构建阶段选项卡中

在扩展目标中使用框架

在常规选项卡中

在构建设置选项卡中 -> 链接 将@executable_path/../../Frameworks 添加到运行路径搜索路径

【讨论】:

嘿,它对我不起作用?执行此步骤后,我在应用程序目标上找不到框架错误 @muku 我在使用 watchOs 1.0 时遇到了这个问题,现在在 watchOs 2.0 上,扩展程序可以直接在 Apple Watch 上运行。因此它可能无法从主应用程序(在 iPhone 上)获取框架。我还没有为我的项目从 watchOs 1.0 切换到 2.0,所以我对此并不满意。 拜托,你能用其他方式解释最后一步吗?将 @executable_path/../../Frameworks 添加到运行路径。在我的项目中,此信息已经出现。我必须改变它吗?

以上是关于Watchkit 扩展的嵌套框架问题的主要内容,如果未能解决你的问题,请参考以下文章

在主要目标中包含 pod,而不是在 WatchKit 扩展中

如何在 Watch OS 2 中引用不支持的框架

WatchKit 的社交框架

如何在 WatchKit 扩展目标中获取核心数据持久存储路径

在共享的 Swift App 框架中使用 Core Data

Xcode 11 Beta 不会因为 WatchKit 而构建?