博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React Native仓库本地CocoaPods支持
阅读量:5906 次
发布时间:2019-06-19

本文共 3437 字,大约阅读时间需要 11 分钟。


声明: 转载注明或, 请在方便的情况下尽量告知.

尊重原创, 共同进步.


前提介绍

公司有个项目主要使用ReactNative开发, 及npm link的方式安装到工程项目中. 由于项目进度紧张, 开发童鞋很多工作能省则省.

当该项目部分功能 (已完成git仓库建设) 移植到本人负责的老项目时, 出现了各种问题. Pods支持就是其中一个. 以下重点讲坑和填坑过程.

ORZ, 如果你是专业人士, 请直接弃文或者移步

1 直接npm link

由于之前集成React项目使用的是CocoaPods, 所以这个选项直接被Pass了.

否则, 就需要把所有的项目都重新导入一遍, 并对项目配置做全面的改动. 而且对于原有的版本管理也是一种冲击, 所以果断放弃.

2 手动拖拽

放弃的理由同1. 配置改动繁琐, 且容易出错.

3 添加CocoaPods支持

3.1 新增package.json

项目根目录下添加此文件, 内容示例如下:

{  "name": "cocoapods-project-name",  "version": "1.0.0",  "description": "nothing to say",  "main": "index.js",  "scripts": {    "test": "echo \"Error: no test specified\" && exit 1"  },  "repository": {    "type": "git",    "url": "git+ssh://git@github.com/ABC/cocoapods-project-name.git"  },  "keywords": [    "react-native",    "cocoapods-project-name",  ],  "author": "ABC",  "license": "MIT",  "homepage": "https://github.com/ABC/cocoapods-project-name#readme"}复制代码

重要的内容为name, version, main, repository, 其它的选填, 更详细的参考官方描述.

3.2 新增podspec

根目录下新增name同名.podspec文件, 示例内容如下:

require 'json'package = JSON.parse(File.read(File.join(__dir__, 'package.json')))Pod::Spec.new do |s|  s.name           = 'cocoapods-project-name'  s.version        = package['version']  s.summary        = package['description']  s.description    = package['description']  s.license        = package['license']  s.author         = package['author']  s.homepage       = package['homepage']  s.source         = { :git => 'git@github.com/ABC/cocoapods-project-name.git', :tag => s.version }  s.requires_arc   = true  s.platform       = :ios, '8.0'  s.source_files    = "ios/foler1/*.{h,m}",            "ios/folder2/*.{h,m}"  s.ios.vendored_library = "ios/folder2/*.a"  s.ios.resource_bundles = {    'MovieData' => ['to/resource/*.av'],    'OtherResources' => ['to/another/resourece/*.av']  }  s.dependency             "React"end复制代码

大致的结构如示例, 重要的内容为name, version.

问题比较多的有source, source_files, ios.vendored_library, ios.resource_bundles, dependency.

  1. source 一般情况下需要填入准确的git仓库路径, 因为使用npm管理包, 已经把项目下载到本地的node_modules目录下, 所以这个设置可以忽略
  2. source_files 要注意目录, 编译路径会被包含, 指向如果错误的话, 会出现找不到文件的问题. 另外, 多个路径是用 ',' 隔开, 使用的字符串基本都是双引号 "
  3. ios.vendored_library 因为本地使用了部分静态库文件, 请使用该选项
  4. ios.resource_bundles 因为本地使用了部分图片/动画/音频/视频等资源文件, 请使用该选项. 官方推荐使用, 可以避免多开源项目共存时的名称空间污染问题
  5. dependency 依赖项. 一般情况下, 作为支持用的Pods仓库最好减少对其它项目的依赖, 避免多个第三方仓库对同一开源项目的依赖版本不同, 导致用户弃坑. ORZ

3.3 修改仓库中本地代码加载Bundle的方式

原来项目使用的方式是手动(ORZ)拷贝资源到主(目标)工程下, 这种做法只能给跪了. 经过修正, 目前方式如下:

- (NSBundle *)movieBundle {    if (self.myBundle) {        return self.myBundle;    }    self.myBundle = [NSBundle bundleForClass:[self class]];    NSURL *bundleURL = [[self.myBundle resourceURL] URLByAppendingPathComponent:@"MovieData.bundle"];    if (bundleURL) {        self.myBundle = [NSBundle bundleWithURL:bundleURL];    }    return self.myBundle;}- (void)watchAV {    // ... 苍老师, 你懂的    [[AVAudioPlayer alloc] initWithContentsOfURL:[[self movieBundle] URLForResource:"Aoi" withExtension:@"av"] error:&error]    // ...}复制代码

3.4 添加Tag

在公共(开源)项目仓库下, 一定一定要添加Tag标记! 这是程序员的美好品德~

git tag -a 1.0.0

随便填入点Tag标注内容, 以便通知需要关注的人

git push origin --tag

3.5 修改目标项目package.json文件

{  # 其它内容(注意该文件不允许有注释)  "dependencies": {    "cocoapods-project-name", "^1.0.0",  },  # 其它内容(注意该文件不允许有注释)}复制代码

然后执行

npm install

3.6 修改目标项目Podfile文件

# 其它内容target "ProjectTargetName" do    pod 'cocoapods-project-name', path: 'node_modules/cocoapods-project-name'end# 其它内容复制代码

然后执行

pod update --no-repo-update

结语

填完坑后, 发现团队协作的项目确实有很多需要改善的地方, 也有很多改善的空间. 记录于此, 以作回顾.

你可能感兴趣的文章
Hi~"自霉体人",阿里巴巴UC订阅号发布会强势来袭
查看>>
使用Scrapy爬取知乎网站
查看>>
深入Java虚拟机读书笔记[8:9]
查看>>
MFS 安装手记
查看>>
智能家居433M和zigbee到底哪个比较好
查看>>
malloc与free
查看>>
乐视网发布提示性公告:55%股份解禁在即
查看>>
TCP异常终止(reset报文)
查看>>
dtd与xsd去区别
查看>>
pyqt5_站点管理_email_windows
查看>>
在linux准备Java开发环境
查看>>
Docker Pull速度太慢如何提速
查看>>
前后端JSON数据传递对象包含对象处理
查看>>
敏捷个人2012.5月份户外活动报道:0费用京郊经典户外路线【京西古道】
查看>>
网站运营服务商选择
查看>>
javascript split函数讲解
查看>>
模拟redolog损坏,删除损坏并添加新的redolog
查看>>
Parallels安装Kali2.0遇到的问题及解决办法
查看>>
JAVA死锁和避免死锁
查看>>
我的友情链接
查看>>