【问题标题】:Building an embedded framework for WatchOS and iOS in Xcode 8 with Swift 3使用 Swift 3 在 Xcode 8 中为 WatchOS 和 iOS 构建嵌入式框架
【发布时间】:2016-11-17 15:52:11
【问题描述】:

我正在将最初用 Swift 1 编写的所有 iOS + WatchOS 1 应用程序移植到最新的 Xcode 8、WatchOS 3、Swift 3。

我的应用有一个嵌入式框架,该框架具有一些常用功能,用于为 watchkit 扩展目标和 ios 应用目标编译和运行文件。

使用 Xcode 8,我似乎无法再让它工作。当我尝试在 watchkit 扩展代码中 import 框架时,我得到了 module not found 错误。

是否仍然可以在目标 iOS 和 WatchKit 扩展目标上编译和使用一个嵌入式框架包?在我的框架中,我将目标平台设置为watchos, watchsimulator, iphoneos, iphonesimulator

我的直觉告诉我这不可能了。原来所有代码都真正在手机本身上运行,而不是代码在实际手表和手机上运行,​​您需要专门为每个代码编译一个嵌入式框架。

【问题讨论】:

  • 我需要创建一个新项目,该项目应该使用 iOS 和 WatchOS 之间共享的 swift 框架。您是否找到任何解决方案或提示、参考?

标签: ios swift xcode watchkit


【解决方案1】:

短版:你不能。创建一个重复的目标并将其设置为使用手表 SDK。

Apple 文档的更长版本:https://developer.apple.com/library/content/documentation/General/Conceptual/WatchKitProgrammingGuide/iOSSupport.html#//apple_ref/doc/uid/TP40014969-CH21-SW1

包括:

注意

为 WatchKit 创建单独的框架目标之后 扩展,您必须单独管理该框架的内容 适用于 iOS 和 watchOS。如果您将文件添加到 iOS 版本的 框架,记得将它们添加到 watchOS 版本中。

【讨论】:

    【解决方案2】:

    从 Xcode 11 开始,您可以使用 Swift 包管理器来执行此操作,而无需重复目标。至少已经在 Xcode 12 beta6 中进行了测试,这是另一种选择,在提出问题或我最初回答时不存在(并且它不符合问题的详细要求,因为它需要更新的 Xcode)。

    【讨论】:

    • 是的,但另一个仍然是该问题的严格正确答案(指定 Xcode 8)。我觉得这是一种完全独立的方法,可能对某些人有用,值得一提。通过单独做,人们可以分别对答案进行评分,以最好的方式指导人们,并使 cmets 得到一个特定的答案。
    • 我已经尝试过了,但失败得很惨。问题是,Xcode 12b5 中的链接类型检查器在构建之前失败。即使您将 iPhone 和 WatchOS 添加为 TargetBuildType。
    • 我刚刚尝试过(Xcode 12beta6),这一切似乎都有效。我创建了一个 iOS 应用程序项目,创建了一个 swift 包并添加到项目中,然后添加了一个手表应用程序目标。然后我将包添加到手表扩展和 iOS 应用程序中,向包中添加一个公共常量以进行测试,然后将包导入到手表扩展程序和 iOS 应用程序中的文件中,然后访问公共常量。没有从模板更改包文件。 @Augunrik
    • 在此处演示:github.com/josephlord/WatchiOSSPMDemo 不确定您遇到问题的原因。
    • 感谢您的跟进,我不知道我做错了什么。我会看看你的例子来学习!
    猜你喜欢
    • 2020-07-07
    • 1970-01-01
    • 2015-10-07
    • 2017-02-10
    • 2015-03-08
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多