iOS 远程私有库的搭建以及使用(下)

简介: iOS 远程私有库的搭建以及使用(下)

十、资源文件 .buldle 的添加



  • 10.1、什么是Bundle文件?
    答:简单理解,就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成一个Bundle文件。方便在其他项目中引用包内的资源。


  • 10.2、Bundle文件的特点?
    答:Bundle是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参加项目编译的。也就意味着,bundle包中不能包含可执行的文件。它仅仅是作为资源,被解析成为特定的2进制数据。


  • 10.3、bundle的优点
  • (1)、因为bundle在目录结构中的层次结构,一个bundle只包含资源文件。因此,你可以使用相同的文件接口像打开其他类型文件一样打开bundle文件
  • (2)、bundle的结构使它可以很容易的支持本地化,你可以非常容易的添加或者移除本地资源
  • (3)、bundle可以保持在多种格式的的系统中, 如HFS,HFS+和AFP的multiple fork formats;UFS,SMB,NFS 的single-fork formats


  • 10.4、我们创建一个 JKCIOBase.bundle 的资源文件
  • <1>、新建一个工程macOS的Bundle项目


image.png


<2>、命名为:JKCIOBase.bundle


image.png


<3>、删除文件夹和info.plist文件


image.png


<4>、删除Build Settings里的Packaging的info.plist的文件地址


image.png

<5>、设置 Base SDK 为 iOS


image.png


  • <6>、把 Build Active Architecture Only 修改为 NO,否则生成的库就只支持当前选择设备的架构


  • <7>、bundle中的图片格式修改
    iOS 创建Bundle时放入的图片资源(.png)在默认配置下会被转为.tiff格式,使用的时候找不到。因为在iOS中创建bundle时会用一个“hack”,为了使所有的运行需要更改一个配置。找到bundle的工程,修改:


image.png


<8>.可选配置

作为资源包,仅仅需要编译就好,无需安装相关的配置,设置 Skip InstallYES,清除 Installation Directory 路径信息。


image.png


<9>、最关键是把工程目录下的Build SettingsCode Signing Identity 的苹果研发者证书换成 iOS研发者证书

image.png


<10>.添加要打包的资源文件进到文件夹,编译


image.png


<11>、进入到 JKCIOBase.bundle


image.png

<12>、把JKCIOBase.bundle复制到其他的iOS项目


image.png


  • <13>、图片的使用
  • 第一种直接拖入项目使用,取路径如下
  • OC


"JKCIOBase.bundle/icon_scan"
  • 加载图片


UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 40, 40)];
imageView.image = [UIImage imageNamed:@"JKCIOBase.bundle/icon_scan"]
[self.view addSubview:imageView];
  • Swift


let path = Bundle.init(for: ViewController.self).path(forResource: "Frameworks/xcrbasekit.framework/xcrbasekit", ofType: "bundle")
let bundle = Bundle.init(path: path!)
let image = UIImage.init(named: "xbb_bigV", in: bundle, compatibleWith: nil)
let userImageView = UIImageView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
userImageView.image = image
view.addSubview(userImageView)
  • 对于上面参数的理解


let path = Bundle.init(for: #className.self).path(forResource: "#bunleName", ofType: "bundle")
let bundle = Bundle.init(path: path!)
let image = UIImage.init(named: "#pageName", in: bundle, compatibleWith: nil)


  • className:bundle所在的类的类名
    bunleName:bundle名称
    pageName:要使用的图片名称


  • 第二种封装成SDK再使用,取路径如下
  • OC


"Frameworks/JKOCProjectTool.framework/JKCIOBase.bundle/icon_scan"
  • 加载图片


UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 40, 40)];
imageView.image = [UIImage imageNamed:@"Frameworks/JKOCProjectTool.framework/JKCIOBase.bundle/icon_scan"]
[self.view addSubview:imageView];
  • Swift,取资源调用 <14> 里面的函数


let userImageView = UIImageView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
userImageView.image = UIImage(named: getBundleResource(bundName: "xcrbasekit", resourceName: "xbb_bigV", bundleType: 1))
view.addSubview(userImageView)
  • <14>、把图片路径封装成宏
  • OC


#define JKOCProjectToolBundlePath(file) [@"JKOCProjectTool.bundle" stringByAppendingPathComponent:file]
#define JKOCProjectToolFrameworkBundlePath(file) [@"Frameworks/JKOCProjectTool.framework/JKOCProjectTool.bundle" stringByAppendingPathComponent:file]
#define JKOCProjectToolBundleImageName(file)  [UIImage imageNamed:JKOCProjectToolBundlePath(file)] ? :[UIImage imageNamed:JKOCProjectToolFrameworkBundlePath(file)]
  • Swift 写成函数


/// 获取资源文件
/// - Parameter bundName: bundle的名字
/// - Parameter resourceName: 资源的名字,比如图片的名字
/// - Parameter bundleType: 类型:默认 0 是在自己模块下使用,1 在其他模块中使用
func getBundleResource(bundName: String,resourceName: String,bundleType: Int = 0) -> String {
   if bundleType == 1 {
       return "Frameworks/\(bundName).framework/\(bundName).bundle/\(resourceName)"
   }
   return "\(bundName).bundle/" + "\(resourceName)"
}


十一、远程私有库内容更新



远程私有库内容更新的更新其实和里面一样的步骤,修改JKCIOBase里面的内容,更改spec内的版本号,有要修改的就修改内容,打版本tag,提交tag到远程私有仓库,提交spec文件打破本地spec仓库与远程私有spec检索仓库


十二、fastlane 自动化更新pod库



  • 12.1、什么是自动化?
    答:通过简单的一条命令, 去自动执行一组固定操作,比如:测试、打包上传审核、分发 等自动化使用场景


  • 12.2、Fastlane 简介
    Fastlane是一个ruby脚本集合


  • 12.3、Fastlane使用概念
  • lane(航道) : 好比一道题
  • Action机制:好比做一道题分很多步,每一步都是一个 Action,专业的解释:Action是Fastlane自动化流程中的最小执行单元,体现在Fastfile脚本中的一个个命令,比如:cocoapodsgit_add等等,而这些命令背后都对应一个用 Ruby 编写的脚本。


  • produce 创建可用于 iTunes Connect 和 Apple Developer Portal 的 iOS app。
  • cert 自动创建和维护 iOS 代码签名证书。
  • sigh 创建、更新、下载和修复 provisioning profiles。
  • snapshot 自动将 App 屏幕截图本地化到每种设备上。
  • frameit 将屏幕截图适配到适当的设备屏幕大小。
  • gym 创建和打包 iOS app。
  • deliver 上传屏幕截图、元数据和 App 到 App 商店。
  • PEM 自动创建和更新 Push 通知的 profile。



sudo gem install fastlane
sudo gem install -n /usr/local/bin fastlane

提示:要求ruby版本最新

brew update
brew install ruby


  • 提示:如果报错:-bash: brew: command not found
  • 解决上面报错的方法:mac 终端下,执行以下命令,即可安装brew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 在终端环境下,brew --version 查看brew的版本,也可以验证brew是否安装成功


  • 12.5、在项目使用 Fastlane
  • <1>、在终端 cd 进入项目根目录
  • <2>、fastlane init


image.png


  • (1)、📸自动截图
  • (2)、👩✈️自动测试分发到TestFlight
  • (3)、🚀自动化App Store分发
  • (4)、🛠手动设置 - 手动设置项目以自动执行任务


提示1:看自己的需求,我这里选的4

提示2:如果不需要实现上传等操作, 其实我们可以直接在工程目录下, 创建一个fastlane文件夹, 在文件夹内部创建"使用文件"(Fastfile文件),在成功后 fastlane 文件夹里面会有一个 Fastfile 文件


  • <3>、 在fastlane 文件夹里面的 Fastfile 文件中, 描述不同的"航道",我们这里以下面的步骤为主


提示:在代码转化为 action的过程都是在 Actions描述 里面查找的

  • (1)、提交代码到本地暂缓区,git add .,对应的fastlane  命令如下


git_add(path: ".")

提示: . 代表当前文件下所有的内容


  • (2)、提交代码到本地仓库,git commit -m '提交内容说明' ,对应的fastlane  命令如下,提交说明的信息,我们可以定义成参数传进来


git_commit(path: ".", message: "提交代码")
  • (3)、提交代码到远程仓库,git push origin master,对应的fastlane  命令如下


push_to_git_remote
  • (4)、给版本打tag,git tag 版本号,对应的fastlane 命令如下


add_git_tag(
    tag: 版本号
)

提示:版本号我们传进来

  • (5)、提交所有的版本 git push --tags,对应的fastlane 命令如下


push_git_tags
  • (6)、删除指定tag: 本地删除git tag -d 0.0.1,远程删除:git push origin :0.0.1,对应的fastlane 命令如下


remove_tag(tag:版本号)
  • (6)、验证spec文件是否有报错,允许有警告,pod spec lint --allow-warnings,对应的fastlane 命令如下


pod_lib_lint(allow_warnings: true)
  • (7)、如果你在验证的时候有警告,只要没有报错可以加上 --use-libraries --allow-warnings就可以提交:pod repo push 本地私有库名 组件名.podspec --use-libraries --allow-warnings,,对应的 fastlane 命令如下


pod_push(path: "#{组件名}.podspec", repo: "本地库名", allow_warnings: true)
  • (8)、pod install 对应的 fastlane 命令如下


cocoapods(
    clean: true,
    podfile: "."
)

提示:podfile后面的路径是以 fastlane文件夹为准需要 Podfile 文件的,如果Podfile与fastlane文件夹同目录,那么就写:podfile: ".",其中 .代表当前目录


  • 12.6、fastlane文件夹下Fastfile文件的命令完整的步骤如下:


default_platform(:ios)
   platform :ios do
      desc "pod远程提交"
      lane :custom_lane do |options|
      # 参数一:提交代码的备注
      commit_message = options[:message]
      # 参数二:版本号
      commit_tagName = options[:tagName]
      # 参数三:spec 文件的名字
      commit_specName = options[:specName]
      # 参数四:仓库的本地检索库的名字
      commit_repositoryName = options[:repositoryName]
      # 1、提交代码到本地暂缓区
      git_add(path: ".")
      # 2、提交代码到本地仓库
      git_commit(path: ".", message: "#{commit_message}")
      # 3、提交代码到远程仓库
      push_to_git_remote
      # 4、验证tag是否存在,如果存在, 应该删除本地标签和远程标签
      # 如果判断标签是否存在
      if git_tag_exists(tag: commit_tagName)
             UI.message("发现tag:#{commit_tagName} 已经存在, 即将执行, 删除动作 🚀")
             # 执行删除本地/远程标签
             remove_tag(tag:commit_tagName)
      end
      # 5. git tag 标签名称
      add_git_tag(
            tag: commit_tagName
      )
      # 6. 提交tag到服务器  git push --tags
      push_git_tags
      # 7. 验证spec文件是否有问题
      pod_lib_lint(allow_warnings: true)
      # 8. 推送 spec 文件到本地和服务器
      pod_push(path: "#{commit_specName}.podspec", repo: "#{commit_repositoryName}", allow_warnings: true)
      end
 end
  • 使用方式:把fastlane文件夹拖到和spec文件同一目录下,cd 进入 spec 文件所在的目录,执行下面的命令


命令:  fastlane custom_lane message:提交内容说明 tagName: 版本号 specName: spec文件名字 repositoryName: 仓库名字


提示:一定要有 fastlane文件夹,里面有Fastfile文件


十三、其他组内成员如何使用?



  • 13.1、分配权限给同事
    把创建的远程代码私有库以及远程spec私有库都添加你同事进来,让他注册码云账号,添加这两个远程私有库
  • 13.2、添加本地私有库
    重复 一 里面的 1.2在本地添加一个spec仓库
  • 13.3、配置Podfile文件

image.png


远程公有库

本地私有库

目录
相关文章
|
5月前
|
iOS开发
iOS使用.framework类型的静态库
iOS使用.framework类型的静态库
39 1
|
5月前
|
开发工具 iOS开发
iOS制作.framework静态库
iOS制作.framework静态库
47 1
|
5月前
|
iOS开发 Perl
iOS使用.a类型的静态库
iOS使用.a类型的静态库
39 1
|
5月前
|
开发工具 iOS开发
iOS制作.a类型的静态库
iOS制作.a类型的静态库
36 1
|
5月前
|
开发工具 iOS开发 Perl
iOS使用SDK静态库
iOS使用SDK静态库
51 0
|
5月前
|
XML JSON API
IOS网络编程:介绍一下 Alamofire 库。
IOS网络编程:介绍一下 Alamofire 库。
120 3
|
12月前
|
安全 物联网 API
iOS开源库总结
iOS开源库总结
42 0
|
前端开发 API Android开发
Android侧滑踩坑记(仿IOS侧滑finish页面基于Slidr库)
Android侧滑踩坑记(仿IOS侧滑finish页面基于Slidr库)
259 0
|
Web App开发 存储 网络协议
ios 组件化之Cocoapods私有库详解以及问题解决方案
ios 组件化之Cocoapods私有库详解以及问题解决方案
ios 组件化之Cocoapods私有库详解以及问题解决方案
|
开发工具 iOS开发 Perl
iOS开发 - undefined symbols for architecture x86_64,大多数都是缺少静态库,缺少静态库分下面几种
iOS开发 - undefined symbols for architecture x86_64,大多数都是缺少静态库,缺少静态库分下面几种
174 0
iOS开发 - undefined symbols for architecture x86_64,大多数都是缺少静态库,缺少静态库分下面几种