前言:最近自己写了一个图片选择器的库,想借着这个机会学习一下怎么让自己的库支持cocoapod和carthage,由于我封装的这个库内容非常多,所以在开发过程中遇到了很多的小问题都比较特殊,google半天有时也解决不了,通过慢慢摸索还是成功了,在这里记录一下我在开发中遇到的各种问题点。

假如我们已经创建了一个库,库的名称是climagePickerTool,并且已经上传到github,下面我们就来一步一步让它支持cocoapod.

(对于需要暴露出来的类和方法,一定要用public修饰,因为我第一次搞得时候就没有注意到这一点,还有一点!!我的工程名称叫climagePickerTool,我的库的名称也叫climagePickerTool,这样不好!在下面我集成carthage的时候就遇到了问题,建议项目名称和库的名称不要一致,因为人家引用的是你的库而不是整个项目,只要保证库名称是你想要的就好了。下面先贴出来我的项目目录,后面也可以参考)

一、支持cocoapod

1.cd到当前目录

cd  climagePickerTool

2.在当前文件夹下创建一个podspec文件

pod spec create climagePickerTool

3.编辑 podspec文件,这里是用vim打开的

vim climagePickerTool.podspec

4.由于podspec文件自动生成了很多内容,我们可以不用管他,全选删除,将下面的代码复制到该文件中,下面对这块代码进行讲解,根据你自己的库名称和目录对照着改一下就好了。

Pod::Spec.new do |s|
      s.name = 'climagePickerTool'
      s.version = '2.0.5'
      s.license = 'MIT'
      s.summary = 'This is a picture selector'
      s.homepage = 'https://github.com/Darren-chenchen/climagePickerTool'
      s.authors = { 'Darren-chenchen' => '1597887620@qq.com' }
      s.source = { :git => 'https://github.com/Darren-chenchen/climagePickerTool.git',:tag => s.version.to_s }

      s.ios.deployment_target = '8.0'

      s.source_files = 'climagePickerTool/climagePickerTool/**/*.swift'
      s.resource_bundles = { 
'climagePickerTool' => ['climagePickerTool/climagePickerTool/images/**/*.png','climagePickerTool/climagePickerTool/**/*.{xib,storyboard}','climagePickerTool/climagePickerTool/**/*.{lproj,strings}']
      }
    end

下面我们来解释一下各个选项的意义。
s.name = 'climagePickerTool' 你的库的名称
s.version = '2.0.5' 版本号
s.license = 'MIT' listen文件的类型
s.summary 简单的描述
s.homepage = 'https://github.com/Darren-che...' 库的github地址

详细说下下面的含义吧,比如我的库的全部demo都在climagePickerTool项目下的climagePickerTool文件夹下,并且都是swift写的就可以表示成如下的形式
s.source_files = 'climagePickerTool/climagePickerTool/*/.swift'

对于项目中用到的资源文件,比如我的图片路径就是climagePickerTool/climagePickerTool/images,如果用到了xib或者storyboard,或者用到了本地化相关的文件,总之只要是相关的资源文件都要表现出来
s.resource_bundles = {
'climagePickerTool' => ['climagePickerTool/climagePickerTool/images//.png','climagePickerTool/climagePickerTool//.{xib,'climagePickerTool/climagePickerTool/*/.{lproj,strings}']

}

5.提交代码到github,并打标签

git commit -a -m “......”
    git push 
    git tag 1.0.0   // 这个版本要和podspec中的version一致
    git push origin --tags   // 提交到远端

6.检查podspec 文件是否有错误

pod spec lint climagePickerTool.podspec

如果出现climagePickerTool.podspec passed validation. 就表示没有错误。

7.如果之前没有注册过CocoaPods账号。
打开终端,在终端中输入如下命令:

pod trunk register 邮箱地址 '用户名' --description='描述信息'

然后根据终端显示信息,如果成功的话会提示让你去邮箱里确认进行激活。

输入如下命令可查看个人CocoaPods账号信息

pod trunk me

8.如果注册过,就你直接执行下面的代码,直接推到cocoapods服务器

pod trunk push  climagePickerTool.podspec

(如果你完成了第6部,下面的操作跟着终端的提示一步一步也能完成后续操作,主要是遇到问题不要太着急,细心看!)

9.如果你能完成上面操作,在执行完 pod trunk push climagePickerTool.podspec后如果出现下面的情况就说明你的库已经支持cocoapod了。

10.成功上传后要先执行 pod setup更新下pod才能搜索到自己的库。

二、支持carthage

  1. 新建targets

2.添加需要编译的文件和资源,这个地方要特别注意,Compile Sources 文件中不能添加xib文件和图片资源,只能添加后缀名为swift的文件

![
![Uploading 屏幕快照 2017-08-31 下午9.08.55_981672.png . . .]
](http://upload-images.jianshu....

  1. 这里也有一个注意点,大家可以从图片中看到,我新建的target名称是climagePickerTool-framework,如果我想打包出来的文件名不要这个名称,我想要换个名称,我本来是想用climagePickerTool这个名称,那么打包出来的framework就是climagePickerTool.framework,但是这个名称和项目名称重复了,这样肯定不行,但是我现在又不能去改项目名称,大家都知道改项目名称又会遇到很多问题,所以我这里就很无奈的给framework起了另外一个名字--ImagePickerTool.framework。说了这么多,在哪设置名称呢,看图片吧!

4.再补充一个注意点!我的库最低支持ios8,当你新建target后要检查是不是也是最低支持ios8

5.分享target,勾选我们的framework ,点击close

6.下面开始测试我们的framework库是不是可以用,先生成一个framework
进入我们当前文件夹climagePickerTool,执行下面代码,会生成一个carthage文件夹

carthage build --no-skip-current

7.新建一个项目,测试framework是否可以使用,将上面生成的ImagePickerTool.framework,拖到项目中,

运行项目,如果没有报错就开始测试是不是已经引入了framework库,

8.如果可以用也没有报错,就说明这个framework就可以使用的,下面就可以通过Carghage来导入framework了。在这之前先把我们的demo上传到github,并且打一个新标签

git commit -a -m “......”
    git push 
    git tag 1.0.1   // 这个版本要和podspec中的version一致
    git push origin --tags   // 提交到远端

9.测试carthage 。建议再建一个项目,在项目根目录新建一个Cartfile文件,在里面写入

github "Darren-chenchen/climagePickerTool"

执行

carthage update

执行完成应该是下面的状态

10.还需要手动添加一下framework库。

再来说下我在这一步遇到的问题吧!因为我的库也支持cocoapod,在cocoapod中如果要加载xib或者图片,肯定是要先找到后缀名为.bundle的文件,然而carthage却是要找后缀名为.framework的文件,因为之前一直没有处理这个问题,导致项目总是在xib的位置奔溃,下面就贴出来我针对carthage的处理

感谢您的阅读,欢迎访问我的github。

swift项目-让自己的项目支持cocoapod和carthage的更多相关文章

  1. ios – 黑客入侵MFMessageComposeViewController

    2)如何找出实际的messageSend方法及其实现的类?

  2. ios – 在设备上构建和运行时,仅将嵌入式框架与其他动态框架链接失败

    TL;博士将您的嵌入式框架与其他框架链接,并且不将其他框架与您的应用程序链接,导致Build&在设备上运行.描述:建立:我的设置非常简单(Swift2.3&XcodeXcode8.0;Build版本8S162m):>使用Carthage(0.17.2)我用xcodebuild8.0和TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3carthagebui

  3. ios – Xcode 7.1 PrototypeTools链接器错误(仅限模拟器)

    我正在尝试使用Xcode7.1在iOS模拟器中运行我的应用程序,但我收到链接器错误.这是错误:clang:错误:链接器命令失败,退出代码为1这似乎是一个新问题,因为我在升级到新的Xcode之前没有它.我在Google上搜索过,但是这个问题几乎没有相关主题.有趣的是,该应用程序在设备上运行良好.我已经尝试重置模拟器并再次清洁/建造,但两者都没有奏效.有没有其他人遇到过这个问题,你能提供什么建议吗?

  4. ios – iPhone崩溃日志不能正确地符号化并且是双重间隔的

    任何建议超过欢迎.谢谢.解决方法当这件事发生在我身上时,它只是我通过电子邮件收到的日志.如果我记得,至少有一些是在.msg文件中,我不得不把它们拿出来.它可能是Exchange编码更改.如果你显示不可见的字符,你可能会看到每个字符之间的东西.您可以找到并替换它们以删除它们或更改编辑器中的编码.

  5. 如何使用iOS上的BluetoothManager.framework私有API发送和接收数据

    这些天我正在开展一个项目,我们需要将非MFI蓝牙设备连接到iPhone,并且该设备不支持成为BLE外围设备客户端,因此我们必须在经典蓝牙上执行此操作.我设法使用BluetoothManager.framework与demoprojectBeeTee的指南配对并将设备连接到iPhone但我不知道如何发送和recv数据,我在类转储标头中找不到API.似乎答案在于这三个结构:BTAccessoryMan

  6. ios – 如何存档包含自定义框架的应用程序?

    我有一个我创建的xcode框架项目,我可以编译成一个myframework.framework文件.编译之后,我将这个框架拖到我应用程序的Frameworks项目文件夹中,然后利用框架中的类,将适当的import语句添加到需要它的任何类;这允许我的应用程序成功编译与在框架中定义的类的引用.要使应用程序成功部署到我的设备,我还将我的自定义框架添加到我的目标的“嵌入式二进制文件”部分.有了这一切,我可

  7. ios – Xcode无法找到strip-frameworks.sh目录

    谢谢!

  8. 哪些Xcode项目文件可以从我的git repo中排除?

    我正在开发一个iOS项目,并使用git进行版本控制.我正在与另一位开发人员合作.我应该保留哪些Xcode项目文件在repo中,哪些可以排除,这样不会对其他开发者产生负面影响?这里有一些非代码文件,git告诉我已被修改或添加…

  9. ios – Iphone / Ipad在缩放时崩溃

    i=hUb1GHJ6有没有人有什么可能出错的线索?解决方法我们正在做很多调试,我们终于找到了一个解决方案.我们有一个“跳过导航”链接,只有在您的键盘上按“标签”时才显示.这最初设置为“text-indent:-10000px”.这可能导致视口宽度超过10000像素,然后导致手机使用太多内存,然后最终崩溃.我们已经通过删除这个CSS规则来解决这个问题,所以blush.no不会崩溃那么多了.Iphone仍然有内存泄漏的问题,直到他们解决这个问题,网站有时会崩溃,但不会像以前那样接近.

  10. 在客户端获取iOS Universal Framework的版本号

    这可能不限于iOSUniversalFrameworks,而是所有xxx.framework文件.然而,我似乎找不到如何获取当前版本和客户端应用程序中构建框架的文档.在一个应用程序中,您可以使用以下内容:这将为您提供存储在应用程序的Info.plist中的当前信息.但是我们如何找到一个框架的信息.在我的情况下,具体是嵌入式框架.解决方法我发现苹果在Xcode6中支持的新的CocoaTouch框架为

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部