精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何在 Swift 中使用 CocoaPods

移動開發 iOS
本文介紹如何在 Swift 項目中使用 CocoaPods 。如果你已經精通 Bridging Header 的方法,請直接跳到 “擴展 CocoaPods” 一節。

本文介紹如何在 Swift 項目中使用 CocoaPods 。如果你已經精通 Bridging Header 的方法,請直接跳到 “擴展 CocoaPods” 一節。

什么是 CocoaPods

CocoaPods is the dependency manager for Objective-C projects. It has thousands of libraries and can help you scale your projects elegantly. 

從介紹看,它是主要給 Objective-C 項目用的,但是我們可以很容易地混合 Objective-C 和 Swift 到同個項目,從而利用大量的 CocoaPods 庫和 Swift 漂亮舒服的語法。

作為 iOS 開發新手,一定是要緊跟前人腳步,學習使用 CocoaPods 。

基礎用法

這里簡單略過,請參考其他無數的文章。

安裝

系統默認安裝,可以參考其他教程 。在命令行下執行。

  1. sudo gem install cocoapods 

我的環境是 HomeBrew

  1. # 添加 taobao Mirror 不然被墻掉沒辦法下載 
  2. gem sources -a http://ruby.taobao.org/ 
  3. # 安裝 
  4. gem install cocoapods 
  5. # 更新命令 
  6. rbenv rehash 
  7. # 執行 
  8. pod 
  9. # 此時一般會下載官方的所有 PodSpec 庫,也可以用 pod setup 初始化環境 

本文不打算在安裝部分耗費太多時間。希望看到這里保證你的命令行下有可用的 pod 命令。

使用

假設我們已經有個項目,叫 ProjName ,需要使用一些注明的 CocoaPods 庫,比如 AFNetworking3.

首先,命令行 cd 到我們的項目目錄,一般 ls 命令會看到如下幾個文件夾

  1. ProjName 
  2. ProjName.xcodeproj 
  3. ProjNameTests 

贊,就是這里,創建一個 Podfile 文本文件,寫入如下內容

  1. platform :ios, "8.0" 
  2. pod "AFNetworking""~> 2.0" 

一般這么簡單的文件都是直接 nano 寫。 :)

直接創建 Podfile , CocoaPods 會創建一個項目同名的 WorkSpace ,然后添加一個叫 Pods 的項目,這個項目編譯結果是一個叫 libPods.a的鏈接庫, 它會添加到我們之前的 ProjName 項目中作為編譯依賴。

當然,通過命令行執行 pod init 也可以自動創建 Podfile,而且可以自動分析當前項目的 target ,相對來說更好,也更優雅。具體請參考官方手冊。這樣的好處是更細致,還可以區分多個子項目子 target 。原理大同小異。

然后接下來,命令行執行 open ProjName.xcworkspace,注意這個可不是 .xcodeproj,這個是 CocoaPods 為我們創建的一個 WorkSpace ,包含我們之前的項目,和 Pods 依賴。

開始編碼過程。直接在代碼里調用,比如寫在某個按鈕的 @IBAction 里:

  1. let manager = AFHTTPRequestOperationManager() 
  2.    let url = "http://api.openweathermap.org/data/2.5/weather" 
  3.    println(url) 
  4.   
  5.    let params = ["lat": 39.26, "lon": 41.03, "cnt":0] 
  6.    println(params) 
  7.   
  8.    manager.GET(url, 
  9.        parameters: params, 
  10.        success: { (operation: AFHTTPRequestOperation!, 
  11.                    responseObject: AnyObject!) in 
  12.            println("JSON: " + responseObject.description!) 
  13.        }, 
  14.        failure: { (operation: AFHTTPRequestOperation!, 
  15.                    error: NSError!) in 
  16.            println("Error: " + error.localizedDescription) 
  17.        }) 

這里直接抄了 JakeLin 的 SwiftWeather 代碼4,就一小段,希望他不會打我。

Swift 坑爹了

看起來貌似我們已經可以在 Swift 中使用 AFNetworking 了。結果剛寫幾句代碼一堆類和變量找不到定義,而且坑爹的是很多時候我們只能靠猜測,判斷這些 Objective-C 的定義轉換成 Swift 定義是什么樣子,用起來就是完全靠蒙!

這不科學!

這都三禮拜了,所以大家都摸索出了調用的方法,那就是按照和 Objective-C 代碼混編的例子,添加 Bridging Header !

繼續

之前簡單介紹過和 Objective-C 交互的內容5,大家可以去圍觀。

一般說來,你在 Swift 項目新建 Objective-C 類的時候,直接彈出是否創建 Bridge Header 的窗口,點 YES 就是了,這時候一般多出來個 ProjectName-Bridging-Header.h 。然后刪掉這個類, Bridging Header 頭文件還在。

在這個 Bridging Header 文件里寫入要導入的 CocoaPods 庫,就可以在 Swift 中使用了。

  1. #import <AFNetworking/AFNetworking.h> 

如果沒有自動創建頭文件的話,這個配置在項目的 Build Settings 中的 Swift Compiler – Code Generation 子項里。

創建一個頭文件,指定為 Bridging Header 也可以。

然后編譯,成功執行!

這就完事了?

實際上,前兩天剛寫一篇 Swift 的模塊系統 , 把任意 Objective-C 庫當做 Swift Module 是可行的。當時就覺得這個東西應該是可能完全進入 CocoaPods 的,但是在官方 repo 找了下發現,以前有人提過增加 module.map 支持,結果 CocoaPods 的人認為這個是 llvm 內部特性, issue 被關閉了。#2216 最近又被提起,我在后面提了下 Swift 支持,希望官方靠譜。

所以下面的內容,就是,我們是否可以在 CocoaPods 上加入 module.map 支持,然后直接在 Swift 中 import ModuleName ?

擴展 CocoaPods

考慮了多種方式,***選擇了 Hook 的方式。如果 Ruby 技術足夠好,或許可以直接寫個插件。或者直接改官方代碼給官方提交。但是實在能力有限。相關的 module.map 語法參考 llvm 官方手冊 Modules – Clang 3.5 documentation。用了最簡單的功能。也許遇到復雜的 PodSpec 就不起作用了,但是原理如此,相信小伙伴們已經知道怎么做了。

目前我的 Podfile 大概是這個樣子:

  1. platform :ios, "8.0" 
  2. pod "AFNetworking""~> 2.0" 
  3. pod "Baidu-Maps-iOS-SDK""~> 2.0" 
  4.   
  5. post_install do |installer| 
  6.   File.open("#{installer.sandbox_root}/Headers/module.map"'w'do |fp| 
  7.     installer.pods.each do |pod| 
  8.       normalized_pod_name = pod.name.gsub('-'''
  9.       fp.write <<EOF 
  10. module #{normalized_pod_name} [system] { 
  11.   umbrella "#{pod.name}" 
  12.   export * 
  13. EOF 
  14.       puts "Generating Swift Module #{normalized_pod_name.green} for #{pod} OK!" 
  15.     end 
  16.   end 
  17. end 

post_install 是 Podfile 的一種 hook 機制,可以用來加入自定義操作。我在這里的寫的邏輯就是,針對所有的 Pod 生成一個 module.map 文件。 位于 Pods/Headers/,這個目錄被 CocoaPods 自動設置為項目的 Header Search Path 所以不需要額外處理。默認我們的 Swift 文件就找得到。

其中 normalized_pod_name 用于處理百度地圖 API SDK 這一類名字帶減號的庫,因為他們不能作為 Module Name ,實際上或許有更好的方法來處理。

實際效果

實測發現完全沒有問題,直接 import AFNetworking 或者 import BaiduMapsiOSSDK 都可以。

而且很不錯的一點是,按住 Command 鍵,然后鼠標點擊模塊名、類名等,會跳轉到 Swift 定義。

遇到提示 .pcm 文件 outdate 的情況下需要你刪除 $HOME/Library/Developer/Xcode/DerivedData/ModuleCache 目錄,這個目錄保存的是預編譯模塊,類似于預編譯頭文件。

目前 Swift 還是有很多 BUG 的,調用 NSObject 也許會讓編譯器直接 segment fault ,不帶任何出錯信息。很傷情。此時請***時間檢查語法是否有詭異,其次將所有用到字符串或者 Optional 的地方都額外用變量處理,避免用字面常量。(個人經驗)

如果多次調用 pod install 并在其中修改過 Podfile,那么有可能你的項目依賴會亂掉,多了不存在的 .a 文件到依賴或者多次包含。手工在項目樹和項目選項里刪除就可以了。此類編譯錯誤都是鏈接錯誤。

總結

本文提出了一種 Bridging Header 之外的使用 CocoaPods 庫的方法。利用有限的 Ruby 知識寫了個 Hook 。目前測試 OK 。

參考

  1. CocoaPods Offical Site CocoaPods 官網
  2. CocoaPods – CocoaChina CocoaChina 對 CocoaPods 的介紹
  3. AFNetworking – Github
  4. SwiftWeather
  5. Swift and ObjectiveC Interop (Swift 與 Objective-C 之間的交互)
責任編輯:閆佳明 來源: blog.jobbole
相關推薦

2015-08-27 09:46:09

swiftAFNetworkin

2011-08-10 09:31:41

Hibernateunion

2022-06-23 08:00:53

PythonDateTime模塊

2022-05-17 08:25:10

TypeScript接口前端

2024-01-18 08:37:33

socketasyncio線程

2021-06-09 09:36:18

DjangoElasticSearLinux

2021-03-09 07:27:40

Kafka開源分布式

2019-09-16 19:00:48

Linux變量

2024-09-06 11:34:15

RustAI語言

2020-11-30 11:55:07

Docker命令Linux

2020-04-09 10:18:51

Bash循環Linux

2015-11-26 10:57:56

DockerOpen vSwitc

2022-10-25 09:07:28

Linuxxargs命令

2023-12-01 09:18:27

AxiosAxios 庫

2025-03-21 09:58:59

Python數據類型安全

2021-09-10 10:30:22

Java代碼

2018-05-16 10:32:06

Linux命令find

2023-11-02 11:15:01

容器Kubernetes

2015-08-31 13:42:06

IDEDockerdoclipser

2023-01-05 17:13:28

TypeScript泛型組件
點贊
收藏

51CTO技術棧公眾號

国产一区二区| 18免费在线视频| 亚洲二区在线| 亚洲色图狂野欧美| 中日韩av在线播放| 性xxxfreexxxx性欧美| 成人h精品动漫一区二区三区| 91精品国产99| 成人18视频免费69| 国产精品sss在线观看av| 欧美视频在线看| 永久域名在线精品| 五月婷婷开心中文字幕| 麻豆精品新av中文字幕| 97婷婷大伊香蕉精品视频| 日本欧美一区二区三区不卡视频| 涩涩屋成人免费视频软件| 一本高清dvd不卡在线观看| 伊人色综合影院| 性xxxx18| 国产91在线观看丝袜| 国产精品18久久久久久首页狼| 少妇久久久久久被弄高潮| 亚洲精品中文字幕99999| 日韩午夜激情视频| 热久久精品免费视频| 俄罗斯一级**毛片在线播放| 国产精品美女久久久久av爽李琼| 精品久久久久久一区二区里番| 91福利免费视频| 肉色丝袜一区二区| 久久99久国产精品黄毛片入口| 日本猛少妇色xxxxx免费网站| 都市激情亚洲| 日韩免费成人网| 91制片厂毛片| 日韩一区二区三区在线免费观看 | 欧美三级资源在线| 成人毛片一区二区| 欧美性受ⅹ╳╳╳黑人a性爽| 中文字幕中文字幕在线一区 | 欧美性受xxxx黑人猛交| 五月天丁香激情| 天天射成人网| 中文字幕欧美专区| 国产午夜福利一区| 九色精品国产蝌蚪| 国产午夜精品理论片a级探花| 欧美xxxxx少妇| 亚洲精品在线国产| 日韩免费一区二区三区在线播放| 香蕉视频999| 日韩久久一区| 欧美日韩小视频| 亚洲激情在线观看视频| 欧洲精品一区二区三区| 色偷偷88欧美精品久久久| 免费在线观看日韩视频| 伊人色综合一区二区三区影院视频| 亚洲狠狠爱一区二区三区| 日本国产中文字幕| 日本在线视频中文有码| 亚洲午夜激情网站| 色欲色香天天天综合网www| av成人 com a| 欧美日韩免费一区| 中文字幕乱码人妻综合二区三区| 伊人色综合一区二区三区影院视频| 欧美视频精品一区| 欧美黑人又粗又大又爽免费| 神马电影网我不卡| 欧美伊人久久久久久久久影院| 冲田杏梨av在线| 亚洲欧洲日韩精品在线| 欧美巨大另类极品videosbest| 中文字幕1234区| 成人福利一区| 亚洲男人第一网站| 成人在线手机视频| 亚洲精品网址| 国产69精品久久久久99| 永久免费无码av网站在线观看| 视频一区免费在线观看| 国产精品视频午夜| 99国产在线播放| 成人av网站在线观看| 欧美xxxx黑人又粗又长精品| 在线a免费看| 亚洲综合色成人| 日本成年人网址| 亚洲日本中文| 亚洲精品国产精品国自产在线| 蜜桃传媒一区二区亚洲av| 成人羞羞视频在线看网址| 欧美精品在线观看91| 亚洲天堂日韩av| 免费成人在线观看视频| 97视频资源在线观看| 五月激情六月婷婷| 国产精品美女久久久久aⅴ| 国产夫妻自拍一区| 国产成人免费9x9x人网站视频 | 天堂社区在线视频| 白嫩亚洲一区二区三区| 日韩成人久久久| www中文在线| 日韩午夜电影| 成人在线免费观看视视频| 天堂8在线视频| 中文字幕中文字幕一区二区| 欧美不卡在线播放| 婷婷激情成人| 亚洲人成啪啪网站| 欧美色图亚洲天堂| 日韩和欧美的一区| 国产呦系列欧美呦日韩呦| 1769在线观看| 一本一本大道香蕉久在线精品| 两女双腿交缠激烈磨豆腐| 国产不卡一区| 高清一区二区三区四区五区| 国产伦理一区二区| 国产日产欧产精品推荐色| 天堂8在线天堂资源bt| 78精品国产综合久久香蕉| 亚洲国产欧美一区二区三区久久| 精品无码一区二区三区蜜臀| 久久综合五月| 久久99久久99精品蜜柚传媒| 亚洲h片在线看| 在线播放亚洲一区| 天堂资源在线视频| 日韩中文字幕亚洲一区二区va在线 | 欧美另类视频在线观看| 久久99精品久久久久久国产越南| 欧美日韩精品免费在线观看视频| 国产资源在线观看入口av| 日韩小视频在线观看专区| 五月综合色婷婷| 蜜乳av一区二区三区| 日本在线观看一区二区三区| 亚洲欧美韩国| 日韩国产在线看| 日韩欧美不卡视频| 国产激情视频一区二区三区欧美| 亚洲欧美精品| 欧美aaaaaa| 最近2019免费中文字幕视频三| 日韩欧美国产另类| 久久久激情视频| 十八禁视频网站在线观看| 亚洲第一福利社区| 欧美在线视频免费| 日本亚洲一区| 色综合久久久久综合99| xxx在线播放| 日韩电影免费在线看| 日韩欧美一区二区三区四区| 久久99久久99精品免观看软件| 亚洲男人的天堂在线| 久久国产乱子伦精品| 久久色.com| 三级在线免费看| 成人网18免费网站| 91久久久精品| 国内在线免费视频| 亚洲精品在线看| 无码久久精品国产亚洲av影片| 国产精品午夜电影| 亚洲自拍第三页| 欧美久久九九| 精品一区二区三区国产| 日本电影欧美片| 中文字幕日韩精品在线| 国产熟女一区二区三区四区| 亚洲一区二区精品3399| jizz日本免费| 喷白浆一区二区| 中文字幕中文字幕一区三区| 日本免费一区二区视频| 97国产一区二区精品久久呦| 欧美zozo| 91精品国产91综合久久蜜臀| 中文在线观看免费网站| 久久美女高清视频| 国产成人美女视频| 欧美精品激情| 欧美一区二区三区在线免费观看| 97成人超碰| 欧美激情国产高清| 成人在线观看一区| 日韩欧美成人一区| 青青视频在线免费观看| 综合欧美亚洲日本| 白丝女仆被免费网站| 精品一二三四在线| 国产极品粉嫩福利姬萌白酱| 日韩中文字幕高清在线观看| 国产免费一区| 欧美xxxx性| 4p变态网欧美系列| 黄网站在线免费| 亚洲摸下面视频| 国产福利资源在线| 在线观看欧美黄色| 久久久精品国产sm调教| 亚洲国产高清在线| 无码一区二区精品| 精品一区二区成人精品| 日本成人黄色网| 亚洲激情网站| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 欧美大片aaaa| 美女黄毛**国产精品啪啪| 日韩精品一级毛片在线播放| 欧美最近摘花xxxx摘花| 色老头在线观看| 色婷婷综合久久久久中文字幕1| 特黄aaaaaaaaa真人毛片| 91麻豆精品91久久久久同性| 精品黑人一区二区三区| 亚洲成人福利片| 99精品久久久久| 国产精品久久99| 蜜桃久久精品成人无码av| 不卡大黄网站免费看| 国模大尺度视频| 久久99久久久欧美国产| www.色偷偷.com| 国产日韩欧美一区在线| 国产毛片久久久久久国产毛片| 999视频精品| 五月天色一区| 禁果av一区二区三区| 精品久久sese| 久久99精品久久久久久欧洲站| 99久久99久久精品国产片| 国产日韩一区二区三免费高清| 国产成人涩涩涩视频在线观看| 亚洲女同志freevdieo| 久久人人97超碰精品888| 日本在线视频网址| 欧美黄色小视频| 国产精品一卡二卡三卡| 久久不射电影网| 黄色网址在线免费| 久久夜色精品国产| av网站大全在线| 九九热99久久久国产盗摄| dj大片免费在线观看| 久久久黄色av| 18加网站在线| 九九热最新视频//这里只有精品| 26uuu亚洲电影在线观看| 久色乳综合思思在线视频| 成人免费观看视频大全| 欧美老少配视频| 午夜伦理大片视频在线观看| 欧美黑人国产人伦爽爽爽| 日本电影在线观看| 久久久综合av| 亚洲女色av| 国产精品永久免费观看| 99久热在线精品视频观看| 亚洲xxx视频| 国产suv精品一区| 九9re精品视频在线观看re6 | 亚洲最大免费| 亚洲a在线视频| 日本一级黄视频| 国产精品乱看| 天天天干夜夜夜操| 国产一区在线观看视频| 少妇献身老头系列| 91丨九色丨蝌蚪富婆spa| 精品欧美一区二区久久久| 国产精品色一区二区三区| 少妇aaaaa| 欧美午夜电影在线| 在线观看中文字幕av| 欧美一区二区性放荡片| 天堂中文网在线| 中文字幕精品一区久久久久| 含羞草www国产在线视频| 国模吧一区二区三区| 欧美色片在线观看| 96pao国产成视频永久免费| 麻豆成人入口| 一区不卡字幕| 亚洲欧洲综合| 午夜免费看视频| 不卡的看片网站| 亚洲一级理论片| 亚洲va韩国va欧美va| 这里只有久久精品视频| 日韩精品最新网址| 久草视频在线看| 久久国产视频网站| 一区一区三区| 高清av免费一区中文字幕| 国产精品亚洲二区| 国产精彩视频一区二区| 免费av网站大全久久| 亚洲激情 欧美| 国产精品久久久久婷婷| 久久亚洲精品国产| 欧美一区二区三区啪啪| 男人的天堂在线| 久久久久久久97| 日韩av黄色| 日本一区二区在线视频观看| 国精品一区二区三区| 污污的网站18| 久久久亚洲精品一区二区三区| 少妇影院在线观看| 欧美日韩在线观看一区二区| 天天干在线观看| 欧美乱妇高清无乱码| 日韩av一级| 欧美日韩中文国产一区发布 | 欧美理论电影在线观看| a成人v在线| 欧美精品v日韩精品v国产精品| 欧美特黄一级| 天天久久综合网| 中文字幕亚洲不卡| 亚洲天堂五月天| 亚洲欧美国产一区二区三区| 18加网站在线| 亚洲最大的免费| 国产精品久久占久久| www.色就是色| 亚洲国产精品av| 波多野结衣影片| 亚洲欧美另类中文字幕| 九色porny视频在线观看| 国产激情美女久久久久久吹潮| 午夜精品毛片| 在线观看av免费观看| 中文字幕中文字幕中文字幕亚洲无线| 日韩乱码一区二区三区| 亚洲色图激情小说| 精品日韩视频| 日韩av在线电影观看| 天堂精品中文字幕在线| 欧美性xxxx图片| 日韩欧美中文在线| 可以直接在线观看的av| 国产999精品久久久影片官网| 综合亚洲自拍| 日日碰狠狠丁香久燥| 国产日韩欧美精品综合| 激情网站在线观看| 中文字幕亚洲欧美日韩在线不卡| 日韩中文视频| 一区二区在线观看网站| 国产在线一区二区| 青青草原免费观看| 精品免费国产二区三区 | 波多野结衣在线观看一区二区| 男人操女人免费| 欧美国产一区视频在线观看| 亚洲一区二区人妻| 九九视频这里只有精品| 国产乱人伦丫前精品视频| 亚洲色成人一区二区三区小说| 久久亚洲精品国产精品紫薇 | 日韩欧美一级二级三级| 视频在线这里都是精品| 精品免费二区三区三区高中清不卡| 一本综合精品| 亚洲av毛片基地| 欧美一区午夜精品| 2021中文字幕在线| 欧美一区激情视频在线观看| 美女一区二区视频| 青青草国产在线观看| 亚洲第一精品自拍| xx欧美视频| 影音先锋欧美在线| 成人综合婷婷国产精品久久蜜臀 | av网站免费在线看| 欧美丰满嫩嫩电影| 不卡专区在线| 亚洲成人自拍| 国产高清亚洲一区| 久久青青草原亚洲av无码麻豆| 最近2019年日本中文免费字幕 | 蜜臂av日日欢夜夜爽一区| 9999热视频| 日韩经典第一页| 国产成年精品| av片中文字幕| 亚洲影院免费观看| 国产精品无码2021在线观看| 91天堂在线视频| 爽爽淫人综合网网站| 日本黄色小说视频| 国产亚洲综合久久| 99这里只有精品视频|