zoukankan      html  css  js  c++  java
  • cocoaPod

    通过这个教程,你会学习使用一个很流行的第三方开源组件管理工具----CocoaPods。不过这个工具是什么,为什么要使用它呢?

    作为一个iOS开发者,你一定会用到很多别人的代码,这些代码以类库的形式提供。想象一下,如果所有的东西都要你从零开始创建,得有多麻烦!

    如果没有管理工具,你可能会简单地将每个组件加入到你的工程中。但是,这么做有一些弊端:

    1. 组件代码保存在你的工程中,浪费空间。

    2. 没有一个集中的能看到所有可用组件的地方。

    3. 查找和升级组件很困难,尤其是有多个组件需要升级。

    4. 在你的工程中下载然后引入组件可能存在这样的风险:修改其代码,然后搁置一边。从而导致下次升级时更加麻烦。

    一个第三方组件管理工具可以帮助你克服这些问题。它能自动获取组件的源代码,解决类库之间的依赖,甚至可以创建并维护一个正常的环境来创建你的项目。

    在本教程中,你会学习如何使用CocoaPods。特别的是,你会使用多个开源组件来创建一个app,它可以获取并展示来自 trakt.tv 的电视及电影信息。CocoaPods让这个过程变得非常简单。接着往下看! 

    准备开始

    开始之前:该教程需要你熟悉Xcode,命令行工具,了解ASIHTTPRequest组件、JSON格式。如果你对这些都不熟悉,先看看 其他教程 。 

    PS: 原文中的示例太复杂,和CocoaPods关系不大,因此我强行替换成一个使用ASIHTTPRequest查询天气的示例demo 。 

    CocoaPods官网 说,它是Objective-C工程下最好的管理类库依赖的工具,这么说确实不假!与其自己从GitHub下载代码然后复制到你的工程中,导致将来升级很困难,CocoaPods可以帮你做这些事。 

    下面,你需要安装CocoaPods。它在Ruby下运行,不过这是它唯一的限制。幸运的是,最近版本的Mac OSX系统(从OS X10.7Lion开始)都已经预装了Ruby。所以你只需要更新RubyGems到最新版本。

    打开终端,然后输入如下的命令:

    sudo gem update --system
    

    按提示输入密码,

    要注意在终端中密码不显示字符,只要输完后按回车即可

    。终端中输入看起来应该是这样的:

    更新会花费一点时间,耐心等待几分钟。

    然后,你需要安装CocoaPods。在终端中输入如下命令:

    sudo gem install cocoapods
    

    如果安装过程中遇到以下提示,输入y继续。

    rake's executable "rake" conflicts with /usr/bin/rake
    Overwrite the executable? [yN]
    

    如果遇到:

    ERROR:  Could not find a valid gem 'cocoapods' (>= 0), here is why: Unable to download data from https://rubygems.org/ - Errno::ECONNRESET: Connection reset by peer - SSL_connect (https://rubygems.org/latest_specs.4.8.gz)

    可参考:http://www.phperz.com/article/14/1122/36484.html

    最后,在终端中输入如下命令来完成安装:

    pod setup
    
    这条命令,将 CocoaPods Specs repository

    复制到你电脑上的~/.cocoapods目录下,它需要一点时间来完成。

    到这里,你已经成功安装了CocoaPods!

    PS:从这里开始,不使用原文demo,自己创建一个新工程 。 

    打开Xcode,创建一个新的singleView工程,然后关掉Xcode,是的关掉它。现在该创建你的podfile了。

    安装你的第一个第三方组件

    打开终端,并定位到刚刚创建的工程目录下:

    cd ~/Path/To/Folder/Containing/PodDemo
    

    然后输入命令:

    pod init
    

    这条命令会在你的工程下创建一个默认的Podfile。你将在Podfile里定义所用到的组件。

    输入下面的命令,用Xcode打开Podfile:

    open -a Xcode Podfile
    

    默认的Podfile看起来像这样:

    # Uncomment this line to define a global platform for your project
    # platform :ios, "6.0"
     
    target "PodDemo" do
     
    end
    

    将# platform:ios, "6.0"替换成,告诉CocoaPods你的工程是运行在iOS7下:

    platform :ios, "7.0"
    

    很多类库都有最低的iOS版本要求。如果你省略了这一行,CocoaPods会给一个默认的iOS版本(目前是iOS4.3)。

    现在终于可以用CocoaPods加入你的第一个组件了。在Podfile中,target "PodDemo" do下面加上:

    pod 'ASIHTTPRequest', '1.8.2'
    

    这句话告诉CocoaPods你想要在工程中引入ASIHTTPRequest Version 1.8.2。

    如果你想要使用更复杂的操作,请看 更多Podfile语法 。 

    保存并关闭Podfile。

    现在告诉CocoaPods去安装这些组件到你的工程中。在终端中输入(确保在项目目录下):

    pod install
    

    你会看到如下的输出:

    Analyzing dependencies
    Downloading dependencies
    Using ASIHTTPRequest (1.8.2)
    Using Reachability (3.1.1)
    Generating Pods project
    Integrating client project
    

    可能还会有:

    [!] From now on use `ShowTracker.xcworkspace`.
    

    此时CocoaPods在项目目录下创建了一个Pods文件夹----用于存放所有的第三方组件,以及PodDemo.xcworkspace。

    正如上面的警告提醒,从现在开始,你必须使用PodDemo.xcworkspace来打开该项目。

    如果Xcode项目还打开着,关掉它,打开PodDemo.xcworkspace。

    测试ASIHTTPRequest

    1.在ViewController.h中导入ASIHTTPRequest头文件:

    #import <<span class="title">ASIHTTPRequest/ASIFormDataRequest.h>
    

    2.给ViewController.h添加一个ASIFormDataRequest属性:

    @property (nonatomic,strong)ASIFormDataRequest *request;
    

    3.修改ViewController.m的ViewDidLoad方法:

    - (void)viewDidLoad {
      [super viewDidLoad];
      // Do any additional setup after loading the view, typically from a nib.
      
      NSURL *url = [NSURL URLWithString:@"http://www.weather.com.cn/data/sk/101010100.html"];
      self.request = [[ASIFormDataRequest alloc] initWithURL:url];
      self.request.requestMethod = @"GET";
      self.request.delegate = self;
      [self.request startAsynchronous];
    }
    

    4.在ViewController.m中添加ASIHTTPRequest代理方法:

    - (void)requestFinished:(ASIHTTPRequest *)request
    {
        NSArray *result = [NSJSONSerialization JSONObjectWithData:request.responseData options:NSJSONReadingMutableContainers error:nil];
    
        NSLog(@"%@",result);
    }
    

    运行代码,看到Console输入如下:

    2014-10-15 14:08:24.734 PodDemo[7319:120294] {
      weatherinfo =      {
        Radar = "JC_RADAR_AZ9010_JB";
        SD = "16%";
        WD = "U5317U98ce";
        WS = "4U7ea7";
        WSE = 4;
        city = "U5317U4eac";
        cityid = 101010100;
        isRadar = 1;
        njd = "U6682U65e0U5b9eU51b5";
        qy = 1010;
        temp = 21;
        time = "13:55";
      };
    }
    

    至此,组件已经被成功的引入到你的工程中了!

    添加更多Pods

    既然你已经知道CocoaPods如何工作,下面只剩下一件事可做:添加更多的Pods!

    不过,事实上。。。你应该在工程中引入尽量少的pods。虽然CocoaPods让升级组件变得更容易,但是你始终要不时地更新你自己的代码。长远来看,最好的方式是让这些组件在你的控制之内。

    现在向你的工程添加2个组件。比起从命令行打开Podfile,现在你可以在workspace中找到这个文件并打开。添加:

    pod 'SAMCategories', '0.5.2'
    pod 'Nimbus/AttributedLabel', '1.2.0'
    

    保存,然后安装引用(在终端中使用pod install)。

    你是否注意到Nimbus/AttributedLabel和其他pod不一样,多了一个"/"?大的pods常常将他们的库拆分成核心模块和一些小的子模块。在这个例子中,“/”表示AttributedLabel是Nimbus的子模块。

    如果你不熟悉这些类库,这里有两个例子:

    sstoolk 是一个便捷的工具包,用于解决iOS开发者们经常遇到的问题。 

    Nimbus ,全称NimbusKit,是另一个很有用的工具包。 

    为了测试一切正常,编译项目。此时,你会看到有很多警告!

    “等等,我还没有更改项目代码!”你可能会这么想。

    不管什么时候,你通过CocoaPods添加一个引用,它的源码已经被加入到项目中了。当你编译项目时,它们也会一起被编译。

    所以,如果你加入的引用有很多警告,甚至编译报错,很可能它已经不再被维护了。

    遇到这种情况,你可以在 CocoaPods website 上查找一个替换的组件。同时你还能找到它们的详细信息,如网站链接,说明文档,等等。 

    我们这个实力,大部分的警告都来源于iOS7废弃了一些方法,你可以安全地无视掉它们。

    为了让CocoaPods的引入不显示警告,在Podfile最上方加上:

    inhibit_all_warnings!
    

    重新运行pod install,编译项目,此时你应该看到警告已经不显示了。

    PS: 对Podfile修改安装之后编译项目,可能会出现如下警告 : 

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

    此时,正确的做法是:

    I. Project Cleanup

    1. In the project navigator, select your project
    2. Select your target
    3. Remove all libPods*.a in  Linked Frameworks and Libraries

    II. Update CocoaPods

    1. Launch Terminal and go to your project directory.
    2. Update CocoaPods using the command  pod install

    注意,1.3很重要。

    入门教程到此结束。

    1
  • 相关阅读:
    linux下so动态库一些不为人知的秘密(中二)
    linux下so动态库一些不为人知的秘密(中)
    linux下so动态库一些不为人知的秘密(上)
    Linux下gcc编译控制动态库导出函数小结
    解决Linux动态库版本兼容问题
    MySQL按天,按周,按月,按时间段统计【转载】
    MySQL统计函数记录——按月、按季度、按日、时间段统计以及MySQL日期时间函数大全
    RequestMapping中produces属性作用
    出现 java.net.ConnectException: Connection refused 异常的原因及解决方法
    Springboot应用中@EntityScan和@EnableJpaRepositories的用法
  • 原文地址:https://www.cnblogs.com/fantasy3588/p/5066168.html
Copyright © 2011-2022 走看看