Kev*_*n R 8 xcode dynamic-library ios7 swift
所以我们有一些共享代码的项目,现在它们必须至少与iOS7保持兼容.
目前,我们使用本地cocoapods在不同的应用程序之间共享代码.这有一个缺点,即所有共享代码都放在一个组中.此外,Cocoapods团队解释了为什么iOS7项目无法使用swift pod:
CocoaPods仅支持OS X 10.9及更高版本的Swift,以及iOS 8及更高版本.
原因如下:
苹果X 10/iOS 7及更新版本支持Swift,Apple已多次声明.不支持使用Swift构建静态存档.所有版本的OS X都支持动态框架.在8之前的iOS版本上不支持动态框架:
ld:警告:嵌入式dylibs/frameworks仅在iOS 8或更高版本上运行.
(来源:http://blog.cocoapods.org/Pod-Authors-Guide-to-CocoaPods-Frameworks/)
鉴于此信息,我们希望尝试使用Cocoa Touch Framework-project 共享代码.
我做的是:
Cocoa Touch Frameworkpublicimport Cobra)这似乎也适用于iOS7.这很奇怪,因为在网上我读到这个警告确保该应用程序无法在iOS7设备上运行:
embedded dylibs/frameworks only run on iOS 8 or later
Run Code Online (Sandbox Code Playgroud)
但是,对于我们来说,它似乎在我们的iOS 7测试设备上运行良好.此外,这关系到我:

框架路径似乎直接链接到我的本地DerivedData文件夹.我没有专门选择我的DerivedData文件夹,我只是在Xcode中添加了建议的框架,它决定自己从DerivedData文件夹中获取它.我们与多个程序员一起开展这个项目.
在我沿着这条路走下去并将代码移到这个新设置之前:
为了在内部共享代码,我建议使用git子模块,这需要您在托管存储库中提交代码,托管存储库可以是公共的也可以是私有的.
这是一种将存储在存储库中的代码分发给具有访问权限的任何人的方法.它的好处是您可以将更改推送到存储库,然后其他使用者可以选择更新自己的子模块存储库.它需要将Git用作项目的源代码控制,并且还需要将代码推送到消费者可以访问的存储库.
要将代码用作git子模块,可以使用以下命令将代码存储库添加到git控制的项目中:
git submodule add https://github.com/user/submoduleProject
Run Code Online (Sandbox Code Playgroud)
替换https://github.com/user/submoduleProject为您自己的存储库URL.
添加完成后,您可以使用以下命令:
git submodule init
Run Code Online (Sandbox Code Playgroud)
和
git submodule update
Run Code Online (Sandbox Code Playgroud)
将代码从存储库中提取到用户工作区.
如果要向子模块添加任何更改或更新,可以执行此操作并将其推送到存储库.然后,用户可以使用更新代码git submodule update来获取最新的更改.
有关git子模块的更多信息,请参阅官方文档
我希望这有帮助.
如果在支持低于iOS 8的应用程序上使用动态框架,则应用程序加载程序或Xcode在提交到App Store时将不会接受该应用程序.这很不幸,因为正如您所说,它适用于iOS 7时在设备上测试.
我能想到的最好的方法是与您的团队共享代码,即交出代码文件夹并将其包含在项目中,而不是包含动态框架.如果您希望保持名称间距一致,以便将来可以使用动态框架并从iOS 7迁移,我建议使用围绕公共方法和类的结构来获取名称空间.例如:
public struct MyFrameworkName {
public func doSomethingAmazing() {
// Code...
}
public class DecentClass: NSObject {
// Code..
}
public var terribleString: String
}
Run Code Online (Sandbox Code Playgroud)
这将允许您以与动态框架相同的方式调用应用程序其余部分内的方法
var myObject = MyFrameworkName.DecentClass()
myObject.doMethod()
MyFrameworkName.doSomethingAwesome()
MyFrameworkName.terribleString = "HEY";
Run Code Online (Sandbox Code Playgroud)
回答您对直接从派生数据目录链接到框架的担忧,这通常是一种不正确的方法.
理想情况下,您将框架复制到项目目录中,然后链接到该版本.这允许您将项目的源目录分发给其他人,并且框架将保留在相对于项目源文件夹的正确位置.
我希望这有助于回答你的问题.