xcode – 在多个项目上共享swift代码

前端之家收集整理的这篇文章主要介绍了xcode – 在多个项目上共享swift代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我们有一些共享代码的项目,现在它们必须至少与iOS7保持兼容.

目前,我们使用本地cocoapods在不同的应用程序之间共享代码.这有一个缺点,即所有共享代码都放在一个组中.此外,Cocoapods团队解释了为什么iOS7项目无法使用swift pod:

CocoaPods only supports Swift on OS X 10.9 and newer,and iOS 8 and
newer.

Here’s why:

Swift is supported on OS X 10.9 / iOS 7 and newer,as stated by Apple
numerous times. There is no support for building static archives with
Swift. Dynamic frameworks are supported on all versions of OS X.
Dynamic frameworks are unsupported on iOS versions prior to 8:

ld: warning: embedded dylibs/frameworks only run on iOS 8 or later.

(来源:http://blog.cocoapods.org/Pod-Authors-Guide-to-CocoaPods-Frameworks/)

鉴于此信息,我们希望尝试使用Cocoa Touch Framework项目共享代码.

我做的是:

>在工作区中,创建一个新项目 – > Cocoa Touch Framework
>在此处添加/移动swift代码并将所需的函数/ etc定义为public
>在主构建目标中,将新项目添加为“嵌入式框架”
>如果需要使用已定义库中的类,请使用import语句,其中构建目标名称是模块名称(在我的示例中为import Cobra)

这似乎也适用于iOS7.这很奇怪,因为在网上我读到这个警告确保应用程序无法在iOS7设备上运行:

embedded dylibs/frameworks only run on iOS 8 or later

但是,对我们来说,它似乎在我们的iOS 7测试设备上运行良好.此外,这让我感到担忧:

框架路径似乎直接链接到我的本地DerivedData文件夹.我没有专门选择我的DerivedData文件夹,我只是在Xcode中添加了建议的框架,它决定自己从DerivedData文件夹中获取它.
我们与多个程序员一起开展这个项目.

TL; DR;

在我沿着这条路走下去并将代码移到这个新设置之前:

> Wil这种嵌入共享库的方式会给我的团队带来问题吗? (换句话说:我做错了吗?)
>在将应用程序提交到App Store时,这种嵌入库的方式是否会导致任何问题?
>如果需要:除了简单地来回复代码/文件之外,还有其他方法可以在项目之间共享代码吗?我无法相信没有其他人有这个问题.

解决方法

更新02-03-2015:

为了在内部共享代码,我建议使用git子模块,这需要您在托管存储库中提交代码,托管存储库可以是公共的也可以是私有的.

Git子模块

这是一种将存储在存储库中的代码分发给具有访问权限的任何人的方法.它的好处是您可以将更改推送到存储库,然后其他使用者可以选择更新自己的子模块存储库.它需要将Git用作项目的源代码控制,并且还需要将代码推送到消费者可以访问的存储库.

要将代码用作git子模块,可以使用以下命令将代码存储库添加到git控制的项目中:

git submodule add https://github.com/user/submoduleProject

用您自己的存储库URL替换https://github.com/user/submoduleProject.

添加完成后,您可以使用以下命令:

git submodule init

git submodule update

代码从存储库中提取用户工作区.

如果要向子模块添加任何更改或更新,可以执行此操作并将其推送到存储库.然后,用户可以使用git子模块更新来更新其代码,以获取最新的更改.

有关git子模块的更多信息,请访问官方documentation

我希望这有帮助.

如果在支持低于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
}

这将允许您以与动态框架相同的方式调用应用程序其余部分内的方法

var myObject = MyFrameworkName.DecentClass()
myObject.doMethod()

MyFrameworkName.doSomethingAwesome()

MyFrameworkName.terribleString = "HEY";

回答您对直接从派生数据目录链接到框架的担忧,这通常是一种不正确的方法.

理想情况下,您将框架复制到项目目录中,然后链接到该版本.这允许您将项目的源目录分发给其他人,并且框架将保留在相对于项目源文件夹的正确位置.

我希望这有助于回答你的问题.

原文链接:https://www.f2er.com/iOS/334453.html

猜你在找的iOS相关文章