iOS 開發(fā)之Cocoapods的使用及制作私有pods

一、安裝CocoaPods

第一步:升級(jí)ruby環(huán)境

```

sudo gem updte --system

```

更新Ruby環(huán)境

如果出現(xiàn)

更新ruby錯(cuò)誤

然后就可以進(jìn)行Cocoapods的安裝了鞋吉,

第二步:更換淘寶的RubyGems鏡像代替官方版本,


移除官方的鏡像


更換成淘寶鏡像


驗(yàn)證是否更換成功

第三步:安裝Cocoapods

如果你的是版本是10.11以下用這個(gè)命令

安裝Cocoapods

如果你的是版本是10.11以上用這個(gè)命令

安裝Cocoapods

然后執(zhí)行

將Cocoapods Specs repository復(fù)制到你電腦的~/.cocoapods目錄下

現(xiàn)在這個(gè)repo文件夾大概有750M律杠,所以下載起來非常慢莽鸭,如果你等的比較著急,想看一下當(dāng)前下載的大小

首先

進(jìn)入cocoa pods文件夾中

然后

用這個(gè)命令可以查看文件夾大小珠移,我的已經(jīng)下載完成了,一共是750M

至此我們的Cocoapods就安裝完畢了末融。

二钧惧、如何使用我們的Cocoapods

第一步:創(chuàng)建一個(gè)Xcode工程并且進(jìn)入你的Xcode工程的目錄中

進(jìn)入工程對(duì)應(yīng)的文件夾

第二步:創(chuàng)建一個(gè)Podfile

執(zhí)行pod init創(chuàng)建一個(gè)Podfile

或者

直接用vim Podfile創(chuàng)建一個(gè)Podfile

它們之間的區(qū)別就是pod init生成的Podfile會(huì)默認(rèn)幫我們生成一些代碼,而vim Podfile的Podfile是空的勾习。

我是用pod init生成的Podfile文件

生成的默認(rèn)代碼

然后我們就要編寫我們Podfile了浓瞪,詳見此文第四部分-我的Podfile

編輯好的Podfile文件

第三步:執(zhí)行pod install.

初始化完成

然后打開MyApplication.xcworkspace就可以了。

三巧婶、pod update 和 pod install的區(qū)別

大部分人第一次初始化Podfile的時(shí)候會(huì)用pod install乾颁,之后就一直用pod update涂乌。

那么我們到底該怎么用他們呢,他們的之間的區(qū)別是什么呢英岭?

pod install:每次如果下載新的pods的時(shí)候湾盒,都會(huì)把版本的信息寫進(jìn)podfile.lock中,podfile.lock會(huì)追蹤這些版本诅妹,并且鎖定這些版本历涝。當(dāng)你用這個(gè)命令的時(shí)候,他只會(huì)下載Podfile.lock中不存在的三方庫漾唉。他也只會(huì)去下載Podfile.lock中記錄的版本荧库,而不會(huì)是檢測(cè)一個(gè)更新的版本。如果沒有Podfile.lock中沒有指定版本赵刑,他會(huì)去搜索Podfile文件中對(duì)應(yīng)的版本分衫,如果不指定版本,默認(rèn)為最新版本般此。

pod update [PODNAME]:會(huì)直接去找[PODNAME]最新的三方庫蚪战,而不會(huì)去管Podfile.lock中的版本,他會(huì)一直下載最新版本铐懊,如果你指定了版本邀桑,他會(huì)下載你指定版本中最新的版本。如果使用 pod update科乎,那么他會(huì)將你 Podfile中的所有三方庫都更新成最新的版本壁畸。而且他會(huì)把Podfile.lock中的版本更改成對(duì)應(yīng)的版本。

四茅茂、我的Podfile

第一行:你的平臺(tái)+你支持的版本

? (platform :ios, '8.0')?

第二行:必須寫上你所連接的Xcode target捏萍,這個(gè)一般就是你App的工程的名稱

? (target 'MyApplication' do)

最后一行:end

(end)

第三到N行:在每一行添加一個(gè)你想要使用的三方庫

? (pod '$PODNAME')

我們有以下的幾種方式添加三方庫

? 一、添加開源的三方庫

? ?可以用pod search [PODNAME]命令搜索你想要的三方庫

搜索到想要的三方庫把對(duì)應(yīng)的pod [PODNAME]添加到Podfile中即可,如果用pod [PODNAME]/[Subspecs]那么只使用對(duì)應(yīng)的子三方庫

關(guān)于版本的問題

'> 0.1' :高于0.1的版本

'>=0.1':0.1版本或者更高的版本

'<0.1':小于0.1的版本

'<=0.1':0.1版本或者更低的版本

'~> 0.1.2':版本0.1.2~版本0.2空闲,不包括0.2

'~> 0.1':版本0.1~版本1.0令杈,不包括版本1.0

二、從本地添加

? 1.從本地文件夾添加

? ?pod ’Alamofire’, :path => ‘~/Documents/Alamofire'

? 2.從主分支添加

? ?pod ‘Alamofire’, :git => ’https://github.com/Alamofire/Alamofire.git'

? 3.從次分支添加

? ?pod'Alamofire',:git=>'https://github.com/Alamofire/Alamofire.git',:branch=>'dev'

? 4.用指定的tag

? pod'Alamofire',:git=>'https://github.com/Alamofire/Alamofire.git',:tag=>'3.1.1'

? 5.用指定的commit

? pod'Alamofire',:git=>'https://github.com/Alamofire/Alamofire.git',:commit=>'0f506b1c45'

五碴倾、創(chuàng)建私有podspec

這個(gè)和我們平常的項(xiàng)目最大的區(qū)別就是有必須.podspec和LICENSE這兩個(gè)文件逗噩。

整體先說明一下創(chuàng)建一個(gè)私有的podspec包括如下那么幾個(gè)步驟:

1.創(chuàng)建并設(shè)置一個(gè)私有的Spec Repo。

2.創(chuàng)建Pod的所需要的項(xiàng)目工程文件跌榔,并且有可訪問的項(xiàng)目版本控制地址异雁。

3.創(chuàng)建Pod所對(duì)應(yīng)的podspec文件。

4.本地測(cè)試配置好的podspec文件是否可用矫户。

5.向私有的Spec Repo中提交podspec片迅。

6.在個(gè)人項(xiàng)目中的Podfile中增加剛剛制作的好的Pod并使用残邀。

7.更新維護(hù)pod spec皆辽。

在這一系列的步驟中需要?jiǎng)?chuàng)建兩個(gè)Git倉庫柑蛇,分別是第一步和第二步(第二步不一定非要是Git倉庫,只要是可以獲取到相關(guān)代碼文件就可以驱闷,也可以是SVN的耻台,也可以說zip包,區(qū)別就是在podspec中的source項(xiàng)填寫的內(nèi)容不同)空另,并且第一步只是在初次創(chuàng)建私有podspec時(shí)才需要盆耽,之后在創(chuàng)建其他的只需要從第二步開始就可以。本文只介紹在Git環(huán)境下的操作扼菠,其他環(huán)境其他方式暫不說明摄杂。

1.創(chuàng)建私有Spec Repo

先來說第一步,什么是Spec Repo循榆?它是所有的Pods的一個(gè)索引析恢,就是一個(gè)容器,所有公開的Pods都在這個(gè)里面秧饮,它實(shí)際是一個(gè)Git倉庫remote端在GitHub上映挂,但是當(dāng)你使用了Cocoapods后它會(huì)被clone到本地的~/.cocoapods/repos目錄下,可以進(jìn)入到這個(gè)目錄看到master文件夾就是這個(gè)官方的Spec Repo了盗尸。

官方的Spec Repo目錄

因此我們需要?jiǎng)?chuàng)建一個(gè)類似于master的私有Spec Repo柑船,這里我們可以fork官方的Repo,也可以自己創(chuàng)建泼各,個(gè)人建議不fork鞍时,因?yàn)槟阒皇窍胩砑幼约旱腜ods,沒有必要把現(xiàn)有的公開Pods都copy一份扣蜻。所以創(chuàng)建一個(gè) Git倉庫寸癌,這個(gè)倉庫你可以創(chuàng)建私有的也可以創(chuàng)建公開的,不過既然私有的Spec Repo弱贼,還是創(chuàng)建私有的倉庫吧蒸苇,需要注意的就是如果項(xiàng)目中有其他同事共同開發(fā)的話,你還要給他這個(gè)Git倉庫的權(quán)限吮旅。因?yàn)镚itHub的私有倉庫是收費(fèi)的溪烤,我還不是GitHub的付費(fèi)用戶,所以我使用了其他Git服務(wù)庇勃,我使用的是cocoachina檬嘀,當(dāng)然還有其他的可供選擇開源中國、Bitbucket以及CSDN Code.

創(chuàng)建完成之后在Terminal中執(zhí)行如下命令

PrivateRepo是我們的私有庫名字责嚷,后面是對(duì)應(yīng)的git遠(yuǎn)程倉庫的網(wǎng)址

此時(shí)如果成功的話進(jìn)入到~/.cocoapods/repos目錄下就可以看到PrivateRepo這個(gè)目錄了鸳兽。至此第一步創(chuàng)建私有Spec Repo完成。

添加成功對(duì)應(yīng)的文件夾

PS:如果有其他合作人員共同使用這個(gè)私有Spec Repo的話在他有對(duì)應(yīng)Git倉庫的權(quán)限的前提下執(zhí)行相同的命令添加這個(gè)Spec Repo即可罕拂。

2.創(chuàng)建Pod項(xiàng)目工程文件

這個(gè)第二步?jīng)]有什么好介紹的揍异,如果是有現(xiàn)有的組件項(xiàng)目全陨,并且在Git的版本管理下,那么這一步就算完成了衷掷,可以直接進(jìn)行下一步了辱姨。

如果你的組件還在你冗余龐大的項(xiàng)目中,需要拆分出來或者需要自己從零開始創(chuàng)建一個(gè)組件庫戚嗅,那么我建議你使用Cocoapods提供的一個(gè)工具將第二步與第三步結(jié)合起來做雨涛。

現(xiàn)在來說一下這個(gè)工具,首先我們可以用pod lib create PrivateRepo懦胞,可以帶上--template-url=URL參數(shù)(URL表示git倉庫的地址),就拿我創(chuàng)建的podTestLibrary為例子具體講一下這里是如何操作的替久,先cd到要?jiǎng)?chuàng)建項(xiàng)目的目錄然后執(zhí)行

進(jìn)入你想創(chuàng)建的指定的文件中

他會(huì)問我們五個(gè)問題:

第一個(gè)問題:Objective-C 或者 Swift

第二個(gè)問題:Making a Demo Application,如果選是就會(huì)在你的Xcode工程中新建一個(gè)工程躏尉。

如果你想要一個(gè)demo或者你需要一個(gè)測(cè)試單元在你的工程中侣肄,你應(yīng)該選是

第三個(gè)問題:Choosing a Test Framework,你應(yīng)該測(cè)試你的工程醇份,確保別人可用

如何選擇:如果你不能決定稼锅,就選Specta/Epecta

第四個(gè)問題:View-based Testing,會(huì)根據(jù)你選的測(cè)試自動(dòng)生成一個(gè)

第五個(gè)問題: 你的前綴是什么僚纷。

這個(gè)里面要是不填的話默認(rèn)就是橫線的答案

當(dāng)你填完這些他會(huì)默認(rèn)調(diào)用pod install幫我們初始化好工程矩距,并幫我們打開對(duì)應(yīng)的工程

自動(dòng)幫我們執(zhí)行,不用我們進(jìn)行配置

然后可以看到PrivateRepo的目錄如下(如果沒有tree命令怖竭,可以用brew安裝一個(gè)):

PrivateRepo下面二層的目錄結(jié)構(gòu)

PrivateRepo下面二層的目錄結(jié)構(gòu)

這時(shí)打開PrivateRepo工程锥债,會(huì)看到如下的文件目錄:

PrivateRepo對(duì)應(yīng)的文件目錄

1.Podspec metadata:可以讓你改變你的README和MyLibrary.podspec

2.Example for PrivateRepo:一個(gè)讓你編寫測(cè)試文件的文件夾,如果你沒有選擇測(cè)試文件夾痊臭,你就沒有這個(gè)目錄哮肚。

3.Tests:這里就是之前選擇的測(cè)試模塊

4.Development Pods:你實(shí)際寫代碼的地方,用你的代碼代替ReplaceMe.m文件

將文件或者代碼寫進(jìn)來

5.Frameworks:

如果你寫好了你的庫广匙,想寫測(cè)試模塊或者測(cè)試demo的時(shí)候允趟,首先進(jìn)入Example文件夾執(zhí)行pod update命令,打開工程你應(yīng)該包含 #import <PrivateRepo/XYZ.h>

然后包含對(duì)應(yīng)的頭文件就可以了

特別注意:當(dāng)你更改了了Pod/Classes或者Pod/Assets或者更新了你的pod spec鸦致,你應(yīng)該執(zhí)行pod install命令或者 pod update潮剪。

測(cè)試無誤可以將項(xiàng)目添加并推送到遠(yuǎn)程倉庫,配置你的podspec文件分唾。

本地追蹤并且快照
關(guān)聯(lián)遠(yuǎn)程服務(wù)器
推送到遠(yuǎn)程master分支并打上tag

1抗碰、你應(yīng)該保存你的.podspec文件格式是正確的

我的PrivateRepo.podspec文件

用 pod lib lint 或者 pod spec lint可以檢查.podspec有沒有error或者warning,這兩個(gè)都是不能出現(xiàn)的绽乔,兩者的區(qū)別就是pod lib lint 不訪問網(wǎng)絡(luò)弧蝇,pod spec lint 會(huì)檢查倉庫和對(duì)應(yīng)的tag值。

2、如果你提交你的開源庫到trunk看疗,你不可以用任何的error 或者 warnings沙峻,不過你的xcode中是可以用警告,這里不做解釋鹃觉。

3专酗、如果提交到你的私人的倉庫中睹逃,如果你本地倉庫已經(jīng)有了對(duì)應(yīng)的私有倉庫盗扇,用

MyLibrary表示的是本地的私有庫,MyLibrary表示對(duì)應(yīng)的.podspec文件

否則你要先建立一個(gè)私有倉庫.

3.創(chuàng)建podspec文件

如果已經(jīng)有了現(xiàn)成的項(xiàng)目沉填,就需要給這個(gè)項(xiàng)目創(chuàng)建一個(gè)podspec文件疗隶,創(chuàng)建它需要執(zhí)行Cocoapods的另外一個(gè)命令,官方文檔在這里

PodTestLibrary為本地庫名翼闹,后面為對(duì)應(yīng)的git網(wǎng)址

執(zhí)行完之后斑鼻,就創(chuàng)建了一個(gè)podspec文件,他其中會(huì)包含很多內(nèi)容猎荠,可以按照我之前介紹的進(jìn)行編輯,沒用的刪掉。編輯完成之后使用驗(yàn)證命令驗(yàn)證一下,驗(yàn)證無誤就可以進(jìn)入下一步了蚁孔。

本地測(cè)試podspec文件

我們可以創(chuàng)建一個(gè)新的項(xiàng)目肆汹,在這個(gè)項(xiàng)目的Podfile文件中直接指定剛才創(chuàng)建編輯好的podspec文件,看是否可用输虱。 在Podfile中我們可以這樣編輯些楣,有兩種方式

可以用指定:path或者用指定:podspec路徑這兩種方法

然后執(zhí)行pod install命令安裝依賴,打開項(xiàng)目工程宪睹,可以看到庫文件都被加載到Pods子項(xiàng)目中了愁茁,不過它們并沒有在Pods目錄下,而是跟測(cè)試項(xiàng)目一樣存在于Development Pods/PodTestLibrary中亭病,這是因?yàn)槲覀兪窃诒镜販y(cè)試鹅很,而沒有把podspec文件添加到Spec Repo中的緣故。

在項(xiàng)目中編寫代碼罪帖,測(cè)試庫文件無誤后就可以開始下一步了道宅,提交podspec到Spec Repo中。

4.向Spec Repo提交podspec

向Spec Repo提交podspec需要完成兩點(diǎn)一個(gè)是podspec必須通過驗(yàn)證無誤胸蛛,在一個(gè)就是刪掉無用的注釋(這個(gè)不是必須的污茵,為了規(guī)范還是刪掉吧)。 向我們的私有Spec Repo提交podspec只需要一個(gè)命令

完成之后這個(gè)組件庫就添加到我們的私有Spec Repo中了葬项,可以進(jìn)入到~/.cocoapods/repos/PrivateRepo目錄下查看

再去看我們的PrivateRepo遠(yuǎn)端倉庫泞当,也有了一次提交,這個(gè)podspec也已經(jīng)被Push上去了民珍。

至此襟士,我們的這個(gè)組件庫就已經(jīng)制作添加完成了盗飒,使用pod search命令就可以查到我們自己的庫了。

搜索之后的結(jié)果

這里說的是添加到私有的Repo陋桂,如果要添加到Cocoapods的官方庫了逆趣,可以使用trunk工具,具體可以查看官方文檔嗜历。

使用制作好的Pod

在完成這一系列步驟之后宣渗,我們就可以在正式項(xiàng)目中使用這個(gè)私有的Pod了,然后要指定我們的source梨州,并且將我們私有的庫添加進(jìn)去即可:

指定source并且添加即可測(cè)試

然后執(zhí)行pod update痕囱,更新庫依賴,然后打開項(xiàng)目可以看到暴匠,我們自己的庫文件已經(jīng)出現(xiàn)在Pods子項(xiàng)目中的Pods子目錄下了鞍恢,而不再是Development Pods。

這個(gè)依賴已經(jīng)被添加進(jìn)去了

更新維護(hù)podspec

最后再來說一下制作好的podspec文件后續(xù)的更新維護(hù)工作每窖,比如如何添加新的版本帮掉,如何刪除Pod。

我已經(jīng)制作好了PodTestLibrary的0.0.1版本窒典,現(xiàn)在我對(duì)他進(jìn)行升級(jí)工作蟆炊,這次我添加了更多的模塊到PodTestLibrary之中,包括工具類崇败,底層Model及UIKit擴(kuò)展等盅称,這里又嘗試了一下subspec功能,給PodTestLibrary創(chuàng)建了多個(gè)子分支后室。

具體做法是先將源文件添加到Pod/Classes中缩膝,然后按照不同的模塊對(duì)文件目錄進(jìn)行整理,因?yàn)槲矣兴膫€(gè)模塊岸霹,所以在Pod/Classes下有創(chuàng)建了四個(gè)子目錄疾层,完成之后繼續(xù)編輯之前的PodTestLibrary.podspec,這次增加了subspec特性

因?yàn)槲覀儎?chuàng)建了subspec所以項(xiàng)目整體的依賴dependency贡避,源文件source_files痛黎,頭文件public_header_files,資源文件resource等都移動(dòng)到了各自的subspec中刮吧,每個(gè)subspec之間也可以有相互的依賴關(guān)系湖饱,比如UIKitAddition就依賴于CommonTools。

編輯完成之后杀捻,在測(cè)試項(xiàng)目里pod update一下井厌,幾個(gè)子項(xiàng)目都被加進(jìn)項(xiàng)目工程了,寫代碼驗(yàn)證無誤之后,就可以將這個(gè)工程push到遠(yuǎn)端倉庫仅仆,并打上新的tag->1.0.0器赞。

最后再次使用pod lib lint驗(yàn)證編輯好的podsepc文件,沒有自身的WARNING或者ERROR之后墓拜,就可以再次提交到Spec Repo中了港柜,命令跟之前是一樣的。

最后介紹一下如何刪除一個(gè)私有Spec Repo

PrivateRepo用你的私有庫代替

這樣這個(gè)Spec Repo就在本地刪除了咳榜,我們還可以通過

前面表示你私有庫的名字夏醉,后面表示 ? ? git對(duì)應(yīng)的遠(yuǎn)程倉庫的地址

再把它給加回來。

如果我們要?jiǎng)h除私有Spec Repo下的某一個(gè)podspec怎么操作呢贿衍,此時(shí)無需借助Cocoapods

cd到對(duì)應(yīng)的文件夾授舟,刪掉對(duì)應(yīng)的庫就好了

參考文章:https://guides.cocoapods.org/

? ? ? ? ? ? ? ??http://www.cocoachina.com/ios/20150228/11206.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末救恨,一起剝皮案震驚了整個(gè)濱河市贸辈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肠槽,老刑警劉巖擎淤,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異秸仙,居然都是意外死亡嘴拢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門寂纪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來席吴,“玉大人,你說我怎么就攤上這事捞蛋⌒⒚埃” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵拟杉,是天一觀的道長庄涡。 經(jīng)常有香客問我,道長搬设,這世上最難降的妖魔是什么穴店? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮拿穴,結(jié)果婚禮上泣洞,老公的妹妹穿的比我還像新娘。我一直安慰自己默色,他們只是感情好球凰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般弟蚀。 火紅的嫁衣襯著肌膚如雪蚤霞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天义钉,我揣著相機(jī)與錄音昧绣,去河邊找鬼。 笑死捶闸,一個(gè)胖子當(dāng)著我的面吹牛夜畴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播删壮,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贪绘,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了央碟?” 一聲冷哼從身側(cè)響起税灌,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亿虽,沒想到半個(gè)月后菱涤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洛勉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年粘秆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片收毫。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡攻走,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出此再,到底是詐尸還是另有隱情昔搂,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布引润,位于F島的核電站巩趁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏淳附。R本人自食惡果不足惜议慰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奴曙。 院中可真熱鬧别凹,春花似錦、人聲如沸洽糟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拍霜,卻和暖如春嘱丢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背祠饺。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工越驻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人道偷。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓缀旁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親勺鸦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子并巍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容