CocoaPods的项目源码在Github上管理.,这样就会导致

最近因为项目需要,把CocoaPods更新到了最新版本1.0.1版本,更新完之后出现了一些莫名其妙的问题,导致整个工程跑不起来,报的都是第三方库丢失的错误,但是我查看工程的资源配置和Builder Phases —>Link Binary With Libraries,发现所有的库资源都没有少,但就是会报错,工程跑不起来。

图片 1

更新CocoaPods碰到的问题及知识点,cocoapods知识点

1:解决CocoaPods安装时报的问题, 报404

解决 bad response Not Found 404 ()

原因:淘宝停止基于 HTTP 协议的镜像服务 需要改用https的协议

gem sources --remove http://ruby.taobao.org/

gem sources -a https://ruby.taobao.org/

gem sources -l

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

当然如果你是第一次安装时(目前网上有些安装资料可能还指向淘宝的http):

gem sources -l
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem sources -l
sudo gem install -n /usr/local/bin cocoapods

 

2:CocoaPods更新版本后,安装跟更新第三方报错

Update all pods
Re-creating CocoaPods due to major version update.
Updating local specs repositories
Analyzing dependencies
[!] The dependency `ReactiveCocoa (~> 2.5)` is not used in any concrete target.
The dependency `SDWebImage (~> 3.7.5)` is not used in any concrete target.
The dependency `AFNetworking (~> 2.5.4)` is not used in any concrete target.
The dependency `Masonry (~> 0.6.4)` is not used in any concrete target.
The dependency `JSONModel (~> 1.2.0)` is not used in any concrete target.
The dependency `JCAlertView (~> 1.1.5)` is not used in any concrete target.
The dependency `RongCloudIMKit (= 2.5.2)` is not used in any concrete target.
The dependency `SMPageControl (~> 1.2)` is not used in any concrete target.
The dependency `FMDB` is not used in any concrete target.
The dependency `GTSDK` is not used in any concrete target.
The dependency `BaiduMapKit` is not used in any concrete target.
The dependency `UMengAnalytics-NO-IDFA` is not used in any concrete target.
The dependency `Fabric` is not used in any concrete target.
The dependency `Crashlytics` is not used in any concrete target.
The dependency `CocoaLumberjack` is not used in any concrete target.
The dependency `TTTAttributedLabel` is not used in any concrete target.
The dependency `FLEX` is not used in any concrete target.
The dependency `GVUserDefaults` is not used in any concrete target.
The dependency `UMengFeedback (~> 2.3.4)` is not used in any concrete target.
The dependency `TYAttributedLabel (~> 2.5.6)` is not used in any concrete target.
The dependency `IQKeyboardManager` is not used in any concrete target.
The dependency `MWPhotoBrowser` is not used in any concrete target.

可以通过 $ pod --version 查看版本号;

原因是podfile升级到最新版本,pod里的内容必须明确指出所用第三方库的target;可以修改Podfile文件的配置文件,让它兼容不指定固定版本;且又不报错;

platform :ios, '7.0'

target 'zxptUser’ do

pod 'ReactiveCocoa', '~> 2.5'
pod 'SDWebImage', '~> 3.7.5'
pod 'AFNetworking', '~> 2.5.4'
pod 'Masonry', '~> 0.6.4'
pod 'JSONModel', '~> 1.2.0'
pod 'JCAlertView', '~> 1.1.5'
pod 'RongCloudIMKit', '2.5.2' #不要更新此库 源代码已被修改
pod 'SMPageControl', '~> 1.2'
pod 'FMDB'
pod 'GTSDK'
pod 'BaiduMapKit' #百度地图SDK
pod 'UMengAnalytics-NO-IDFA'#友盟统计无IDFA版SDK
pod 'Fabric'
pod 'Crashlytics'
pod 'CocoaLumberjack'
pod 'TTTAttributedLabel'
pod 'FLEX'
pod 'GVUserDefaults'
pod 'UMengFeedback', '~> 2.3.4'
pod 'TYAttributedLabel', '~> 2.5.6’
pod 'IQKeyboardManager'
pod 'MWPhotoBrowser'

end

其中zxptUser要换成当前target名,最后不要忘记增加一个end结尾,当然如果你的工程是有多个target都要引用;则要使用link_with(这个一定要放在文件第一行)如下:

link_with ['zxptUser' ,'zxptUser_local', 'zxptUser_AppStore']
platform :ios, '7.0'
pod 'ReactiveCocoa', '~> 2.5'
pod 'SDWebImage', '~> 3.7.5'
pod 'AFNetworking', '~> 2.5.4'
pod 'Masonry', '~> 0.6.4'
pod 'JSONModel', '~> 1.2.0'
pod 'JCAlertView', '~> 1.1.5'
pod 'RongCloudIMKit', '2.5.2' #不要更新此库 源代码已被修改
pod 'SMPageControl', '~> 1.2'
pod 'FMDB'
pod 'GTSDK'
pod 'BaiduMapKit' #百度地图SDK
pod 'UMengAnalytics-NO-IDFA'#友盟统计无IDFA版SDK
pod 'Fabric'
pod 'Crashlytics'
pod 'CocoaLumberjack'
pod 'TTTAttributedLabel'
pod 'FLEX'
pod 'GVUserDefaults'
pod 'UMengFeedback', '~> 2.3.4'
pod 'TYAttributedLabel', '~> 2.5.6’
pod 'IQKeyboardManager'
pod 'MWPhotoBrowser'

注意基中本工程中有三个target名字,'zxptUser' ,'zxptUser_local', 'zxptUser_AppStore'

 

3:不同的target引用不同的第三方插件

target :'zxptUser' do
platform :ios  
pod 'Reachability',  '~> 3.0.0'  
pod 'SBJson', '~> 4.0.0'  

platform :ios, '7.0'  
pod 'AFNetworking', '~> 2.0'
end

target :'zxptUser_local' do
pod 'OpenUDID', '~> 1.0.0'
end

注意每个都要以end结尾

 

4:删除CocoaPods版本,并安装指定版本

比如我本来安装完CocoaPods 1.0.0版,但发现它实现跟先前还是差别满大的,决定降回0.39这个比较稳定版本;就可以用命令先删除本地的CocoaPods版本,再指定安装特定版本;

a 卸载 cocoapods(它会提示你要删除本地哪个版也可以全删)

sudo gem uninstall cocoapods

b 安装 0.39版本

sudo gem install -n /usr/local/bin cocoapods -v 0.39

 

5:更新PODS后,报diff: /../Podfile.lock: No such file or directory 错误

diff: /../Podfile.lock: No such file or directory 

diff: /Manifest.lock: No such file or directory 

error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.

如图

图片 2

解决办法:

图片 3

查看工程中PROJECT中Configurations中相关配置是否正准,有可能某个分枝指到一个不存在的pods导致;

 

6:当PODS引入第三方后,项目中引用时发现头文件却显示不存在

排查办法,可以看到相应的targets里面的Build Phases中的Link Binary WithLibraries里面是否有把libPods.a库引入进来

一般出现没有引入进来可能是podFile指定的相应Targets导致其它的Targets没有这个库;

 

7:友盟最新版SDK调整

a:#import“MobClick.h”引入头文件由原来,更新为:#import "UMMobClick/MobClick.h"

b:初始化配置文件也进行更改,采用UMConfigInstance全局变量设置:

    UMConfigInstance.appKey=kUMAnalyticsAppKey;
    UMConfigInstance.channelId=@"App Store";
    [MobClick startWithConfigure:UMConfigInstance];

 

8:关于融云跟百度地图支持IPV6

融云SDK 从2.5.2开始   百度地图SDK 从3.0.0开始

1:解决CocoaPods安装时报的问题, 报404 解决 bad response Not...

一. 什么是 Cocoapods?

CocoaPods是开发OS X和iOS应用程序的一个第三方库的依赖管理工具。利用CocoaPods,可以定义自己的依赖关系,并且随着时间的变化,以及在整个开发环境中对第三方库的版本管理非常方便。

CocoaPods背后的理念主要体现在两个方面。

首先,在工程中引入第三方代码会涉及到许多内容。针对Objective-C初级开发者来说,工程文件的配置会让人很沮丧。在配置buildphases和linker flags过程中,会引起许多人为因素的错误。CocoaPods简化了这一切,它能够自动配置编译选项。

其次,通过CocoaPods,可以很方便的查找到新的第三方库。当然,这并不是说你可以简单的将别人提供的库拿来拼凑成一个应用程序。它的真正作用是让你能够找到真正好用的库,以此来缩短我们的开发周期和提升软件的质量。

CocoaPods的原理: 它是将所有的依赖库都放到另一个名为Pods项目中,然后让主项目依赖Pods项目,这样,源码管理工作都从主项目移到了Pods项目中:

1、Pods项目最终会编译成一个名为libPods.a的文件,主项目只需要依赖这个.a文件即可。

2、对于资源文件,CocoaPods提供了一个名为Pods-resources.sh的bash脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。

3、CocoaPods通过一个名为Pods.xcconfig的文件来在编译时设置所有的依赖和参数。

1.先升级 Gem sudo gem update --system

2.切换 cocoapods的数据源 【先删除,再添加,查看】

gem sources --remove

gem sources -a

gem sources -l

3.安装 cocoapods sudo gem install cocoapods

4.将Podspec文件托管地址从github切换到国内的oschina 【先删除,再添加,再更新】(以下不同颜色是用来区分不同的命令)

pod repo remove master

pod repo add master

pod repo add master pod repo update

5.设置pod仓库 pod setup

6.测试 【如果有版本号,则说明已经安装成功】 pod --version

7.利用 cocoapods来安装第三方框架

7-1 进入要安装框架的项目的.xcodeproj同级文件夹

7-2 在该文件夹中新建一个文件podfile

7-3 在文件中告诉cocoapods需要安装的框架信息 a.该框架支持的平台 b.适用的iOS版本 c.框架的名称 d.框架的版本

8.安装 pod install --no-repo-update pod update --no-repo-update

步骤:

  1. cd 项目路径 (切换到项目的.xcodeproj同级文件夹)

  2. touch podfile/pod init生成podfile文件 (创建podfile,用来保存框架的名称,会去加载指定框架)(补充区别:touch podfile生成空文件,pod init生成了模板,建议使用pod init)

  3. pod search 框架名称

  4. open podfile (打开 podfile 文件/也可以找到文件直接双击打开)

  5. 把框架名称以及版本号导入podfile文件 (记得保存Ctrl + S)

  6. pod update/install --no-repo-update

注意:

1.利用CocoPods管理类库后,以后打开项目就用xxxx.xcworkspace打开,而不是之前的.xcodeproj文件

2.每次更改了Podfile文件,你需要重新执行一次pod update命令。

3.关于.gitignore 当你执行pod install之后,除了Podfile外,CocoaPods还会生成一个名为Podfile.lock的文件,你不应该把这个文件加入到.gitignore中。因为Podfile.lock会锁定当前各依赖库的版本,之后如果多次执行pod install不会更改版本,要pod update才会改Podfile.lock了。这样多人协作的时候,可以防止第三方库升级时造成大家各自的第三方库版本不一致。

  1. CocoaPods在执行pod install和pod update时,会默认先更新一次CocoPods的spec仓库索引。使用--no-repo-update参数可以禁止其做索引更新操作

pod install --no-repo-update h

pod update --no-repo-update

后来经过研究,仔细分析了一下,推测的原因是:因为CocoaPods更新到1.0.1版本之后,在podfile里面需要加上target,用于指向目标工程,在这种情况下,如果执行pod update或pod install等更新操作的话,会重新生成对应于工程的libPods-XXX.a文件(注意:这里的XXX指代的是podfile里面的target或工程名),从而导致与原有的libPods.a文件冲突,这样就会导致工程编译出现奇怪的第三方库丢失错误。

CocoaPods

CocoaPods是一个负责管理iOS项目中第三方开源库的工具,CocoaPods的项目源码在Github上管理.
开发iOS项目不可避免地要使用第三方开源库,CocoaPods的出现使得我们可以节省设置和更新第三方开源库的时间,在iOS开发中经常会用到第三方库如AFNetworking,SDWebImage等,在使用第三方库时,你除了要导入源码外,集成这些依赖库还需要我们手动去配置,还有当这些第三方库发生了更新,还需要手动去更新项目,这就显得非常麻烦.CocoaPods就是为了解决这个问题而生的,通过CocoaPods,我们可以将第三方的依赖库统一管理起来,配置和更新只需要通过简单的几行命令即可完成.

图片 4终端命令演示图

图片 5

一、概要

二. 安装cocoapods

tip: open podfile之后 写入podfile文件的内容之后如下(记得保存Ctrl + S)

错误如图:

iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods) 可以用来方便的统一管理这些第三方库(从一个坑出来,又进了另一个坑而已……)。

(1) 升级Ruby (cocoapods使用Ruby编写)

图片 6podfile文件图

图片 7

二、安装

$sudo gem update —system

1.借助别人写的第三方框架cocoapods-xcode-plugin-master,首先去github下载这个框架

解决办法:更新工程的配置,删掉原有的libPods.a文件。

由于网上的教程基本都大同小异,但细节之处还不是很完善,所以借机会在这里补充下:

(2)更新Ruby源

图片 8github图

如图:找到Build Settings—>Search Paths,将下图中的三项都加上 $(inherited)

注:要使用CocoaPods,那就要下载安装它,而下载安装CocoaPods需要Ruby环境

首先,检查一下你的ruby源
$ gem sources -l
默认情况下,终端应该返回如下信息:
*** CURRENT SOURCES ***

2.下载好之后解压,用Xcode打开CocoaPods.xcworkspace

图片 9

1、Ruby环境搭建

https://rubygems.org/

图片 10打开cocoPods项目

找到libPods.a文件,并将其删掉,重新运行工程。

当前安装环境为Mac mini 10.8.5。Mac OS本身自带Ruby,但还是更新一下保险,因为我第一次安装在没有更新Ruby的情况下就失败了。

当然这个源在墙内是访问不到的,因此我们需要删除此源并添加一个可以在国内访问到的镜像

3.运行CocoaPods.xcworkspace 之后,关闭Xcode注意是退出Xcode,不只是关闭当前CocoaPods.xcworkspace的项目,然后再重新打开Xcode(有提示: load Bundle),安装成功按照操作就会有如下界面:

图片 11

a 查看下当前ruby版本:打开终端输入 ruby -v(确实安装了,不过用这个版本接下来工作失败了,所以更新下ruby)

$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/

图片 12Xcode成功安装CocoPods图

本文由必威发布于必威-编程,转载请注明出处:CocoaPods的项目源码在Github上管理.,这样就会导致

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。