人家写的比我自己的好太多
http://www.cocoachina.com/ios/20150127/11022.html
由于最近公司需要出一个SDK的产品,所以就学习并总结了这篇简书
环境:xcode 7.2
下面我们开始操作:
创建一个静态库工程
打开Xcode,点击File\New\Project,选择iOS\Framework and Library\Cocoa Touch Static Library新建一个静态库工程.
将工程命名为MyFrameworksTest,然后将工程保存到一个空目录下。
一个静态库工程由头文件和实现文件组成,这些文件将被编译为库本身。
当创建静态库工程时,Xcode会自动添加MyFrameworksTest.h和MyFrameworksTest.m。你不需要实现文件,因此右键单击MyFrameworksTest.m选择delete,将它删除到废纸篓中。
任意创建一个View
勾选以下三个选项:
然后点击 Finish 进入工程:
如果导入的View需要导入Xcode的静态库,请在Build Phases的Link Binary With Libraries 中添加
对你的控件的头文件需要做的另一件事是将其添加到库的主头文件MyFrameworksTest.h中。在这个主头文件的帮助下,开发者使用你的库仅仅需要导入一个头文件,如下面的代码一样,而不是自己去选择自己需要的一块导入。
另外如果你想多暴露几个.h文件,而不像我这样只暴露一个.h,那么:
你也可以选择需要暴露的.h文件,我看各微博中的方式都是在Edit中选择构建Header,我用的是Xcode7.2未在Edit中发现他们说的方式,但是在Build Phases中有个+号可直接构建:
点击+号按钮,选择New Header Phases:
之后就会看到“Public”、“Private”、“Project”
“Public”表示公开的,保任何使用你的库的用户均可以获取该头文件。
“Private”表示私有的,不多做解释
“Project”如果你希望使用你静态库的用户能够获取到你所提供的类里的内容,那么你需要把.h导入到该位置。
总的来讲Public是你期望的,Private下的头文件依然是可以暴露出来的,因此名字可能有些误导。讽刺的是,在Project下的头文件对你的工程来说才是“私有”的,因此,你将会更多地希望你的头文件或者在Public下,或者在Project下。
接下来就生成静态库
1、静态库分为手机和模拟器两种(手机端的只有手机能调用,模拟器的只有模拟器能调用)。
首先,构建真机的静态库,如图选择运行设备为真机,command+B构建一下,这是发现libMyFrameworksTest.a文字变成了黑色(之前为红色)
然后选中libMyFrameworksTest.a右键show in Finder发现.a已经生成,之后就可以使用.a和.h文件导入别的工程,并使用之前在.a中构建的View方法了。
注意:此方法生成的.a+.h文件只能在真机上使用。
生成模拟器上使用的.a文件:
改成模拟器 构建构成command + B。
这里需要说明一下,如果你在这个步骤之前先生成了真机上的.a文件,那么你执行这个步骤之后生成的为黑色可直接使用的.a文件;如果你直接使用的模拟器构建.a文件,那么有时候即使你构建成功也会发现.a文件仍为红色,并且无法找到该文件的目录。这个我也不知道为什么,应该是Xcode本身逻辑导致的,所以我建议先构建真机上的.a文件。
重复之前的步骤 就可以在模拟器上运行了(但是,真机又不能用了。。。。)
如果你在真机上使用就会收到错误(由于比较懒,复制别人的图片):
接下来,我们就来生成一个双方都能用的.a
首先,打开终端,复制以下命令
lipo-create
/Users/ObjectPLA/Library/Developer/Xcode/DerivedData/MyFrameworksTest-gjmfufrwwxxwbpbigyezzbclphzv/Build/Products/Debug-iphoneos/libMyFrameworksTest.a
/Users/ObjectPLA/Library/Developer/Xcode/DerivedData/MyFrameworksTest-gjmfufrwwxxwbpbigyezzbclphzv/Build/Products/Debug-iphonesimulator/libMyFrameworksTest.a
-output/Users/ObjectPLA/Desktop/libMyFrameworksTest.a
说明:
千万不要直接复制粘贴到终端中运行!!!!!
绿色:是你手机模式下可用的libMyFrameworksTest.a
红色:是你模拟器下可用的libMyFrameworksTest.a
蓝色:是最后生成双方都可用的libMyFrameworksTest.a --并存在在桌面
最后拿到的libMyFrameworksTest.a 就哪里都可以用了!
网友评论