Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何在iOS和OS X之间创建单个共享框架_Macos_Core Data_Frameworks_Ios8 - Fatal编程技术网

Macos 如何在iOS和OS X之间创建单个共享框架

Macos 如何在iOS和OS X之间创建单个共享框架,macos,core-data,frameworks,ios8,Macos,Core Data,Frameworks,Ios8,我正在尝试创建一个框架来保存在iOS和OS X上运行的应用程序的公共实体类。目前,我只是在每个目标中包含文件,但这需要更改数据模型,以便从当前目标获取类(因为在Swift中,您必须指定模型文件中包含类的模块)。当然,这意味着我有时会忘记,事情也不顺利 显而易见的解决方案是创建一个保存实体类的共享框架,以便数据模型始终指向同一个位置 问题是似乎没有任何方法可以创建一个构建在两个平台上的框架 有没有人找到一种方法来创建一个在两种平台上都能工作的框架或库?结果证明答案非常简单,但不是很明显,至少在我发

我正在尝试创建一个框架来保存在iOS和OS X上运行的应用程序的公共实体类。目前,我只是在每个目标中包含文件,但这需要更改数据模型,以便从当前目标获取类(因为在Swift中,您必须指定模型文件中包含类的模块)。当然,这意味着我有时会忘记,事情也不顺利

显而易见的解决方案是创建一个保存实体类的共享框架,以便数据模型始终指向同一个位置

问题是似乎没有任何方法可以创建一个构建在两个平台上的框架


有没有人找到一种方法来创建一个在两种平台上都能工作的框架或库?

结果证明答案非常简单,但不是很明显,至少在我发布这个问题并研究其他问题之前是这样

需要做的只是为每个平台创建一个框架目标,然后将产品名称设置为相同。由于这也是Swift中的模块名称,因此您可以将核心数据模型中的类字段设置为一个值,并使其在两个平台上工作

我使用的设置是将模型文件包含在两个框架中,但将模型本身直接包含到每个应用程序目标中


您还应该能够将两个应用程序设置为具有相同的产品名称,并使所有功能正常工作,但我没有对其进行测试,框架允许您拥有
MyApp
MyAppMobile

如果您希望创建单个动态框架二进制文件,以下是您可以遵循的步骤(如中所述):

1.更改项目的有效架构和支持的平台。 这将改变您的框架和测试单元的有效架构和支持的平台。如果没有,则手动将其更改为从项目的生成设置继承

  • BASESDK:我推荐OSX,但它也适用于iOS。请注意,使用iOS作为基本SDK,“我的Mac”目标被分为3个不同的目标

  • 支持的平台:
    macosx-iphoneos-iphonesimulator

  • 有效的体系结构:
    arm64 armv7 armv7s i386 x86\u 64

2.更改单元测试包的搜索路径

  • 运行路径搜索路径:
    $(继承)@executable\u path/Frameworks@loader\u path/Frameworks@executable\u path/。/Frameworks@loader\u path/。/Frameworks

  • 框架搜索路径:
    $(SDKROOT)$(继承)


这是一个比有两个单独目标更好的解决方案。

今年WWDC会议正好讨论了这个主题,本文很好地解释了必须做的事情:这样做时,如何更改iOS的部署目标以强制执行最低版本?您可以将其设置为OS X(例如10.10),但与有两个目标时不同,iOS没有设置。@Bytesgay添加一个用户定义的设置IPHONEOS_DEPLOYMENT_TARGET并将其设置为8.0(最低支持)@jeef no它没有:(我相信从版本0.9.0开始,它将与carthage一起工作(尚未在家用brew上)从Xcode 7开始,您不再被允许将为不同平台构建的文件链接在一起,这一事实对该解决方案有何影响?请看,这并不是一个真正的答案,因为您正在创建两个框架,而不仅仅是1这个答案是错的。生成的框架将只支持一个SDK。一旦生成,它将覆盖现有框架Work具有相同的名称。错误是一个很强的词。它肯定不是最优的,因此它不是公认的答案。但是,它确实满足了允许在iOS和OS X项目中共享核心数据模型和相关类文件的需要。这是最初的问题,此路线确实成功地解决了该问题e、 @theMikeSwan我曾经这样做过几次,但效果很好。没有任何东西会被重写,因为不同的框架存储在不同的文件夹中。但我不满意。你有没有找到一种方法让这些框架命名为“Project iOS.framework”和“Project macOS.framework”,然后你将它们作为“导入项目”导入?