前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cocoapods 面试题:只安装新添加的库,已更新的库忽略

cocoapods 面试题:只安装新添加的库,已更新的库忽略

作者头像
公众号iOS逆向
发布2023-09-11 09:01:14
5330
发布2023-09-11 09:01:14
举报
文章被收录于专栏:iOS逆向与安全iOS逆向与安全

前言

在 Bundler 和 RubyGems 的启发下,CocoaPods 被设计成即能处理库之间的依赖关系,又能自动下载并且配置好所需要的库。

为了避免修改第三方库之后,使用pod install的时候 更新了库,采用参数--verbose --no-repo-update,只安装新添加的库

I cocoapods 用法

CocoaPods 可以方便地通过 RubyGems 安装,打开 Terminal,然后键入以下命令:

代码语言:javascript
复制
sudo gem install cocoapods

1.1 Podfile:申明项目代码相关性

Podfile这个文件是用来用来申明项目代码相关性的,正如Bundler的Gemfile,或者npm的package.json。

创建一个 Podfile:cd进入.xcodeproj文件所在的目录,通过命令pod init来创建一个 Podfile

代码语言:javascript
复制
pod 'X', '~> 1.1'

语义化版本: 用一组简单的规则及条件来约束版本号的配置和增长 版本格式:主版本号.次版本号.修订号,版本号递增规则如下:

  1. 主版本号:当你做了不兼容的 API 修改,
  2. 次版本号:当你做了向下兼容的功能性新增,
  3. 修订号:当你做了向下兼容的问题修正。

先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

1.2 更新本地库

代码语言:javascript
复制
pod repo update --verbose

在这里插入图片描述

只更新公开的CocoaPods/Specs.git

代码语言:javascript
复制
 pod repo update master

1.3 只安装新添加的库,已更新的库忽略

代码语言:javascript
复制
#!/bin/sh

#该命令只安装新添加的库,已更新的库忽略

pod install --verbose --no-repo-update
#该命令只更新指定的库,其它库忽略
#pod update 库名 --verbose --no-repo-update

exit 0%

1.4 面试题:理解Podfile.lock文件

告诉你当前的app使用的三方库的版本,来源,和他们生成的hash值,用在多人协作中,来确定版本是否被更改。Podfile更像是一个版本约束,而Podfile.lock才是你真正使用的版本。

Podfile.lock记录了需要被安装的 pod 的每个已安装的版本。如果你想知道已安装的 pod 是哪个版本,可以查看这个文件。推荐将 Podfile.lock 文件加入到版本控制中,这有助于整个团队的一致性。

pod install安装过程中,CocoPods 会使用递归来分析所有的需求,并且建立一个代码相关性的图,最后将 Podfile 序列化为Podfile.lock。

CocoaPods 会创建一个新的包含之前安装好的静态库 Xcode 项目,然后将它们链接成一个新的 libPods target。原有的项目将会依赖这个新的静态库。一个 xcworkspace 文件会被创建,从此之后,只需要打开这个 xcworkspace 文件来进行项目管理开发。

反复使用 pod install 命令,只会让 CocoaPods 重复以上步骤,重新安装这些库。所以,当你需要升级它们时,请使用以下命令: pod update

执行完pod install命令后,生成的Podfile.lock文件就记录下了当时最新Pods依赖库的版本,这时团队中的其它人check下来这份包含Podfile.lock文件的工程以后,再去执行pod install命令时,获取下来的Pods依赖库的版本就和最开始用户获取到的版本一致。如果没有Podfile.lock文件,后续所有用户执行pod install命令都会获取最新版本的依赖库,这就有可能造成同一个团队使用的依赖库版本不一致。

1.5 面试题:执行pod install和pod update区别

install 不会更新区间版本,update则会更新到可升区间的最大版本。尤其在多人开发的大项目有之中,如果Podfile里面没有锁死版本,很容易造成版本被动升级。

1.6 只更新指定的库,其它库忽略

pod update 库名 --verbose --no-repo-update 只更新指定的库,其它库忽略

  • 例子
代码语言:javascript
复制
pod update JPush --verbose  --repo-update  

II 例子(集成社会化分享)

https://blog.csdn.net/u011018979/article/details/124340777

2.1 U-Share SDK 集成步骤

  1. 创建应用,获取Appkey;

集成友盟+ U-Share SDK之前,您首先需要到 【友盟+】官网注册一个新应用,获得Appkey。

  1. 手动下载U-Share SDK 集成 / 自动集成(pods、maven)请看接入指南
  2. 接入SDK:
代码语言:javascript
复制
    pod 'UMCommon'    //必须集成,由原来的UMCCommon变为了UMCommon
    pod 'UMDevice'       //必须集成
# U-Share SDK UI模块(分享面板,建议添加)
    pod 'UMShare/UI'               //由原来的UMCShare/UI变为了UMShare/UI

#集成微信(完整版14.4M)
    pod 'UMShare/Social/WeChat'

代码语言:javascript
复制
#只更新指定的库,其它库忽略
pod update 库名 --verbose --no-repo-update 只更新指定的库,其它库忽略

pod update UMCommon --verbose --repo-update  

cocoapods 小技能:只安装新添加的库,已更新的库忽略 (pod install --verbose --no-repo-update) https://blog.csdn.net/z929118967/article/details/103830017

  1. 分享设置

2.2 配置Universal link

集成完整版的微信、QQ和微博必须要配置Universal link。

微信对Universal Links配置有以下要求:

  1. Universal Links必须支持https
  2. Universal Links配置的paths不能带query参数

微信使用Universal Links拉起第三方App时,会在Universal Links末尾拼接路径和参数,因此App配置的paths必须加上通配符/*

推荐使用友盟的U-Link,2021年6月3日起,U-Link后台上线了Universal link免费生成及重定向功能,免去开发者自行配置。

代码语言:javascript
复制
+       <key>com.apple.developer.associated-domains</key>
+       <array>
+               <string>xxx.umindex.com</string>
+       </array>

https://developer.apple.com/documentation/uikit/inter-process_communication/allowing_apps_and_websites_to_link_to_your_content

检查Universal link是否能够唤起App:如不能请查看Universal link配置方法文档,检查能否在浏览器内直接访问apple-app-site-association文件。

Universal link配置并不是立即生效的,App第一次启动时,iOS系统去官网下载配置的associate文件(拉取这个时间是不可控的,最多会有两三天的延迟)。以后除非App更新或重新安装,否则不会在每次打开时请求apple-app-site-association

配置Universal link:https://developer.umeng.com/docs/191212/detail/191260#h1--universal-link6

2.3 使用友盟官方生成Universal link功能

https://developer.umeng.com/docs/191212/detail/250232

  1. TeamID:苹果开发者的标识,需要去苹果开发者官网上查看,登录之后,打开Account,点击左侧菜单中的MemberShip,就能看到teamID了,
  2. BundleID:iOS应用的唯一标识

填写完这两个参数,再填写完此页面的其他必填参数,点击页面下方的保存按钮,友盟服务端就会自动生成一个Universal link链接,并且直接填充到了输入框中。

2.4 第三方平台配置

分享、登录操作时显示的应用icon、名称和对应开放平台设置有关,必须要创建应用的平台为:微信、QQ、新浪、钉钉、企业微信、支付宝、Facebook、Kakao、LinkeIn、Twitter。

https://developer.umeng.com/docs/128606/detail/193651

登录微信开放平台,填写相关应用信息,审核通过后获取到微信AppID及AppSecret,如果需要微信登录功能,需要申请微信登录权限,注意微信登录有效期为一年,需要按时在微信平台认证

从2020年6月1日起该旧版本SDK会被微信限制使用正常分享功能(分享时会显示“未验证应用”)。因此U-Share已下线微信iOS精简版,且后续不再提供。

建议已使用微信iOS精简版的客户,后续使用微信iOS完整版,可以体验更多高级功能。

III 建立自己的 CocoaPod

花几分钟创建一个.podspec文件可以节省下其他开发者无数的时间。https://blog.csdn.net/z929118967/article/details/103830544

.podspec文件作为 CocoaPods 的一个独立单元,包含了名称,版本,许可证,和源码文件等所有信息。

pod trunk register kunnan@iosre.cn "iosre "注册自己的电脑,使用 Trunk 服务发布 CocoaPod:$ pod trunk push NAME.podspec

IV 常见问题

问题:CDN: trunk URL couldn't be downloaded: https://raw.githubusercontent.com/CocoaPods/Specs/master/Spec

错误信息:

代码语言:javascript
复制
CDN: trunk URL couldn't be downloaded: https://raw.githubusercontent.com/CocoaPods/Specs/master/Specs/b/b/f/PGDatePicker/2.2.0/PGDatePicker.podspec.json Response: Couldn't connect to server

解决方案:在pod 文件添加

代码语言:javascript
复制
source 'https://github.com/CocoaPods/Specs.git'
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS逆向 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • I cocoapods 用法
    • 1.1 Podfile:申明项目代码相关性
      • 1.2 更新本地库
        • 1.3 只安装新添加的库,已更新的库忽略
          • 1.4 面试题:理解Podfile.lock文件
            • 1.5 面试题:执行pod install和pod update区别
              • 1.6 只更新指定的库,其它库忽略
              • II 例子(集成社会化分享)
                • 2.1 U-Share SDK 集成步骤
                  • 2.2 配置Universal link
                    • 2.3 使用友盟官方生成Universal link功能
                      • 2.4 第三方平台配置
                      • III 建立自己的 CocoaPod
                      • IV 常见问题
                      相关产品与服务
                      内容分发网络 CDN
                      内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档