Cocoapods 私有庫(kù)制作以及一些tips

前言

CocoaPods是一個(gè)程序依賴管理工具泌射,使用CocoaPods可以節(jié)省設(shè)置和更新第三方開源庫(kù)的時(shí)間,同樣的也可以利用CocoaPods來(lái)管理我們的私有庫(kù)。以下使用CocoaPods管理私有庫(kù)的方法是以安裝了CocoaPods為前提條件的。CocoaPods的安裝可查看這篇blog

正題

一、使用CocoaPods管理私有庫(kù)的方法包括如下幾個(gè)步驟:

1.創(chuàng)建并設(shè)置一個(gè)私有的Spec Repo
2.創(chuàng)建Pod所需要的項(xiàng)目工程文件杀迹,并且有可訪問(wèn)的項(xiàng)目版本控制地址。
3.創(chuàng)建Pod所對(duì)應(yīng)的podspec文件押搪。
4.本地測(cè)試配置好的podspec文件是否可用树酪。
5.向私有的Spec Repo中提交podspec
6.在個(gè)人項(xiàng)目中的Podfile文件里增加自己私有庫(kù)的Pod并使用。
在這一系列步驟中需要?jiǎng)?chuàng)建兩個(gè)Git倉(cāng)庫(kù)大州,分別是第一步和第二步(第二步不一定非要Git倉(cāng)庫(kù)续语,只要是可以獲取到相關(guān)代碼文件就可以,也可以是SVN等厦画,區(qū)別只在于podspec文件中的source配置項(xiàng)所填寫的內(nèi)容不同)疮茄,并且第一步只是在初次創(chuàng)建私有podspec時(shí)才需要,之后在創(chuàng)建其他的只需要從第二步開始就可以根暑。本文以在Git環(huán)境下的操作為例做介紹力试。

二、下面來(lái)逐步介紹整個(gè)流程:

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

先說(shuō)第一步排嫌,什么是Spec Repo畸裳?他是所有的Pods的一個(gè)索引,也就是一個(gè)容器淳地,所有公開的Pods都在這個(gè)里面怖糊,它實(shí)際是一個(gè)Git倉(cāng)庫(kù)的remote端在GitHub上,當(dāng)你使用了CocoaPods后它會(huì)被clone到本地的~/.cocoapods/repos目錄下颇象,可以進(jìn)入到這個(gè)目錄看到master文件夾就是這個(gè)官方的Spec Repo了蓬抄。所有官方公共的Pods所對(duì)應(yīng)的podspec文件都在這個(gè)路徑下的Specs文件夾下。
因此我們需要?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倉(cāng)庫(kù)百侧,這個(gè)倉(cāng)庫(kù)你可以創(chuàng)建私有的也可以創(chuàng)建公開的能扒,不過(guò)既然私有的Spec Repo佣渴,還是創(chuàng)建私有的倉(cāng)庫(kù)吧,需要注意的就是如果項(xiàng)目中有其他同事共同開發(fā)的話初斑,你還要給他這個(gè)Git倉(cāng)庫(kù)的權(quán)限。
創(chuàng)建完成后在終端中執(zhí)行以下命令:

pod repo add [Private Repo Name] [GitHub HTTPS clone URL]

此時(shí)如果成功的話進(jìn)入到~/.cocoapods/repos目錄下就可以看到YourSpecs這個(gè)目錄了砂竖。至此第一步創(chuàng)建私有Spec Repo完成鹃答。
PS:如果有其他合作人員共同使用這個(gè)私有 Spec Repo的話在他有對(duì)應(yīng)Git倉(cāng)庫(kù)的權(quán)限的前提下執(zhí)行相同的命令添加這個(gè)Spec Repo即可测摔。

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

第二步?jīng)]有什么好介紹的,如果是有現(xiàn)有的組件項(xiàng)目避咆,并且在Git的版本管理下查库,那么這一步就算完成了,可以直接進(jìn)行下一步了整慎。
如果你的組件還在你冗余龐大的項(xiàng)目中围苫,需要拆分出來(lái)或者需要自己從零開始創(chuàng)建一個(gè)組件庫(kù)剂府,那么我建議你使用Cocoapods提供的一個(gè)工具將第二步與第三步結(jié)合起來(lái)做。現(xiàn)在來(lái)說(shuō)一下這個(gè)工具淤袜,相關(guān)的文檔介紹可以查看這里,我們重新創(chuàng)建一個(gè)工程YourPodTestLibrary為例积蔚,來(lái)具體講一下是如何操作的烦周,
先cd到要?jiǎng)?chuàng)建項(xiàng)目的目錄读慎,我就cd到桌面,
然后執(zhí)行命令: pod lib create YourPodTestLibrary
之后會(huì)出現(xiàn)幾個(gè)問(wèn)題:
1.你希望使用那種開發(fā)語(yǔ)言饱亿?
2.是否需要一個(gè)Demo工程闰靴?
3.需要使用哪種測(cè)試框架蚂且?
4.是否需要基于視圖的測(cè)試?
5.你的類以什么為前綴泵肄?

選擇以后淑翼,問(wèn)完這幾個(gè)問(wèn)題它會(huì)自動(dòng)執(zhí)行pod install創(chuàng)建項(xiàng)目并生成依賴玄括。創(chuàng)建完成后的工程和文件夾內(nèi)容看上去應(yīng)該像是這樣的:
接下來(lái)就是向YourPodTestLibrary文件夾中添加庫(kù)文件和資源,并配置podspec文件胃惜。我新建一個(gè)名為YourPodTestLibraryDemoFile繼承自NSObject的類哪雕,包含.h和.m兩個(gè)文件斯嚎,放入到YourPodTestLibrary/Classes中挨厚,然后進(jìn)入Example文件夾執(zhí)行pod update命令列吼,再打開項(xiàng)目工程可以看到寞钥,剛剛添加的YourPodTestLibraryDemoFile文件已經(jīng)在Pods子工程下的Development Pods/YourPodTestLibrary中了陌选。
查看無(wú)誤后需要將該項(xiàng)目添加并推送到遠(yuǎn)端倉(cāng)庫(kù)咨油,并編輯podspec文件。通過(guò)Cocoapods創(chuàng)建出來(lái)的目錄本身就在本地的Git管理下赚爵,我們需要做的就是給它添加遠(yuǎn)端倉(cāng)庫(kù)法瑟,同樣去GitHub或其他的Git服務(wù)提供商那里創(chuàng)建一個(gè)私有的倉(cāng)庫(kù)霎挟,拿到SSH地址,然后cd到YourPodTestLibrary目錄執(zhí)行以下命令:

git add .     #這里有個(gè)"."別漏了
git commit -s -m "Initial Commit of Library"
git remote add origin git@github.com:username/YourPodTestLibrary.git   #添加遠(yuǎn)端Git倉(cāng)庫(kù)SSH地址
git push origin master    #提交到遠(yuǎn)端倉(cāng)庫(kù)

這樣項(xiàng)目就提交到GitHub上了赐纱。
因?yàn)?code>podspec文件中獲取Git版本控制的項(xiàng)目還需要tag號(hào)疙描,所以我們要打上一個(gè)tag讶隐,再執(zhí)行以下命令:

git tag -m "first release" 0.1.0
git push --tags    #推送tag到遠(yuǎn)端倉(cāng)庫(kù)
3.編輯podspec文件

上傳完工程后就可以開始編輯podspec文件了整份,這里是YourPodTestLibrary.podspec文件,它是一個(gè)Ruby文件火俄,用SubLime打開它讲冠,把編輯格式改成Ruby就能看到語(yǔ)法高亮了,原始的podspec文件已經(jīng)有很多內(nèi)容了谱仪,其中以#開頭的都是被注釋掉的部分疯攒,看起來(lái)應(yīng)該像下圖所示:

Pod::Spec.new do |s|
  s.name             = 'FCBaseLibary'
  s.version          = '0.0.5'
  s.summary          = 'FCBaseLibary.'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC
  s.homepage         = 'https://git.xxxx.com/'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'dennis' => 'dennis@awesomedennis.com' }
  s.source           = { :git => "http://git.xxxx.com/ios/app/iOSRepo.git", :tag => "#{s.version}" ,:submodules => true}

  s.ios.deployment_target = '7.0'
  s.platform    = :ios, "7.0"
  # s.source_files = 'FCBaseLibary/Classes/**/*'
  # s.public_header_files = 'FCBaseLibary/Classes/**/*.h'
    s.subspec 'FCCache' do |fccache|
      fccache.source_files = "FCBaseLibary/Classes/FCCache/*.{h,m,mm,c}"
      fccache.public_header_files =  "FCBaseLibary/Classes/FCCache/*.h"
    end
end

下面是編輯完成后的podspec文件敬尺,每個(gè)配置項(xiàng)后面都添加上了注釋:
編輯完podspec文件后,需要驗(yàn)證一下這個(gè)文件是否可用砂吞,如果有任何warning或者error都是不可以的蜻直,它就不能被添加到Spec Repo中。驗(yàn)證需要執(zhí)行以下命令:
pod lib lint
當(dāng)你看到
表示驗(yàn)證通過(guò)了呼巷,不過(guò)這只是說(shuō)明這個(gè)podspec文件是合格的到腥,不一定說(shuō)明這個(gè)Pod是可用的,我們需要在本地做一下驗(yàn)證配名,這就是第四步要做的內(nèi)容了晋辆。

4.本地測(cè)試podspec文件

我們可以創(chuàng)建一個(gè)新的項(xiàng)目瓶佳,在這個(gè)項(xiàng)目的Podfile文件中直接指定剛才創(chuàng)建編輯好的podspec文件,查看是否可用为朋。在Podfile中我們可以這樣編寫习寸,有兩種方式:

pod 'PodTestLibrary', :path => '/Users/username/Desktop/YourPodTestLibrary'     // 指定本地路徑
pod 'PodTestLibrary', :podspec => '/Users/username/Desktop/YourPodTestLibrary/YourPodTestLibrary.podspec'    // 指定本地podspec文件路徑

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

5.向Spec Repo提交podspec

Spec Repo提交podspec需要完成兩點(diǎn)球散,一個(gè)是podspec必須通過(guò)驗(yàn)證無(wú)誤蕉堰,再一個(gè)就是刪掉無(wú)用的注釋(這個(gè)不是必須的,為了規(guī)范還是刪掉吧)冰寻。向我們的私有Spec Repo提交podspec文件只需要一個(gè)命令斩芭,先cdpodspec文件所在的目錄乐疆,然后執(zhí)行:

pod repo push YourSpecs YourPodTestLibrary.podspec  // 前面是本地Repo名字 后面是podspec文件的名字

當(dāng)你看到終端顯示這樣的提示后挤土,表示podspec文件上傳成功了,同時(shí)這個(gè)組件庫(kù)也就添加到我們的私有Spec Repo中了:
完成后可以進(jìn)入到~/.cocoapods/repos目錄中查看到我們私有的Spec Repo了迷殿,并且在YourSpecs這個(gè)私有Repo中已經(jīng)有一個(gè)0.1.0版本的podspec文件了咖杂,如下圖:

目錄

再去看我們?cè)贕itHub上為我們私有的Spec Repo創(chuàng)建的遠(yuǎn)端倉(cāng)庫(kù)翰苫,已經(jīng)有了一次提交,這個(gè)podspec文件也已經(jīng)被push到倉(cāng)庫(kù)中了屈扎。

至此撩匕,我們的這個(gè)私有組件庫(kù)就已經(jīng)制作添加完成了止毕,使用pod search命令就可以查到我們自己的庫(kù)了:
這里說(shuō)的是添加到私有的Repo,如果要添加到Cocoapods的官方庫(kù)忍疾,可以使用trunk工具谨朝,具體可以查看官方文檔

6.使用制作好的pod

在完成這一系列步驟之后字币,我們就可以在正式項(xiàng)目中使用這個(gè)私有的pod了,只需要在項(xiàng)目的podfile文件里增加以下兩行代碼即可:

source 'https://github.com/username/YourSpecs.git'    // 制定pod對(duì)應(yīng)的pod spec文件所在的源士复,切記要在自己的私有庫(kù)前制定source地址Z搴椤S缇ァ辟犀!
pod 'YourPodTestLibrary'

然后執(zhí)行pod install命令安裝庫(kù)依賴,然后打開項(xiàng)目可以看到魂毁,我們自己的庫(kù)文件已經(jīng)出現(xiàn)在Pods子項(xiàng)目中的Pods目錄下了席楚,而不是在Development Pods税稼。

更新和維護(hù)自己的podspec

最后再來(lái)說(shuō)一下制作好的podspec文件后續(xù)的更新和維護(hù)工作要如何進(jìn)行,比如要如何添加新的版本只祠,如何刪除Pod等抛寝。我們之前已經(jīng)制作好了YourPodTestLibrary0.1.0版本,現(xiàn)在我們對(duì)它進(jìn)行升級(jí)工作晶府,這次我添加了更多的模塊到YourPodTestLibrary之中川陆,包括工具類蛮位,底層ModelUIKit擴(kuò)展等土至,這里又嘗試了一下subspec功能猾昆,給YourPodTestLibrary創(chuàng)建了多個(gè)分支垂蜗。
具體做法是先將源文件添加到YourPodTestLibrary/Classes中,然后按照不同的模塊對(duì)文件目錄進(jìn)行整理烘苹,因?yàn)橛兴膫€(gè)模塊镣衡,所以在YourPodTestLibrary/Classes下又創(chuàng)建了四個(gè)子目錄档悠,完成之后繼續(xù)編輯之前的YourPodTestLibrary.podspec文件辖所,這次增加了subspec屬性,變更了podspec文件的版本號(hào)和私有庫(kù)的tag吆视,其它配置項(xiàng)不變啦吧。

Pod::Spec.new do |s|
  s.name             = 'FCBaseLibary'
  s.version          = '0.0.5'
  s.summary          = 'FCBaseLibary.'

  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC
  s.homepage         = 'https://git.xxxx.com/'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'dennis' => 'dennis@awesomedennis.com' }
  s.source           = { :git => "http://git.xxxx.com/ios/app/iOSRepo.git", :tag => "#{s.version}" ,:submodules => true}

  s.ios.deployment_target = '7.0'
  s.platform    = :ios, "7.0"
  # s.source_files = 'FCBaseLibary/Classes/**/*'
  # s.public_header_files = 'FCBaseLibary/Classes/**/*.h'
    s.subspec 'FCCache' do |fccache|
      fccache.source_files = "FCBaseLibary/Classes/FCCache/*.{h,m,mm,c}"
      fccache.public_header_files =  "FCBaseLibary/Classes/FCCache/*.h"
    end
    s.subspec 'FCCategory' do |fccategory|
      fccategory.source_files = "FCBaseLibary/Classes/FCCategory/*.{h,m,mm,c}"
      fccategory.public_header_files = "FCBaseLibary/Classes/FCCategory/*.h"
      fccategory.dependency "FCBaseLibary/FCPublicMethods"
    end
    s.subspec 'FCImage' do |fcimage|
      fcimage.source_files = "FCBaseLibary/Classes/FCImage/*.{h,m,mm,c}"
      fcimage.public_header_files = "FCBaseLibary/Classes/FCImage/*.h"
    end
    s.subspec 'FCPublicMethods' do |fcpublicMethods|
      fcpublicMethods.source_files = "FCBaseLibary/Classes/FCPublicMethods/*.{h,m,mm,c}"
      fcpublicMethods.public_header_files = "FCBaseLibary/Classes/FCPublicMethods/*.h"
    end
    s.subspec 'FCThreeDES' do |fcthreeDES|
      fcthreeDES.source_files = "FCBaseLibary/Classes/FCThreeDES/*.{h,m,mm,c}"
      fcthreeDES.public_header_files = "FCBaseLibary/Classes/FCThreeDES/*.h"
    end
    s.subspec 'HPGrowingTextView' do |hpgrowingTextView|
      hpgrowingTextView.source_files = "FCBaseLibary/Classes/HPGrowingTextView/*.{h,m,mm,c}"
      hpgrowingTextView.public_header_files = "FCBaseLibary/Classes/HPGrowingTextView/*.h"
    end
    s.subspec 'PinyinSort' do |pinyinSort|
      pinyinSort.source_files = "FCBaseLibary/Classes/PinyinSort/*.{h,m,mm,c}"
      pinyinSort.public_header_files = "FCBaseLibary/Classes/PinyinSort/*.h"
    end

    s.frameworks = 'UIKit', 'Foundation', 'WebKit', 'CoreTelephony'
    s.requires_arc = true
    s.dependency 'SDWebImage', '3.7.5'
    s.dependency 'MBProgressHUD', '0.9.2'
end

因?yàn)槲覀儎?chuàng)建了subspec所以項(xiàng)目整體的依賴顾犹,dependency褒墨,源文件source_file郁妈,頭文件public_header_files,資源文件resouece等都移動(dòng)到了各自的subspec中顾彰,每個(gè)subspec之間也可以有相互的依賴關(guān)系涨享,比如FCCategory就依賴于FCPublicMethods仆百。
編輯完成之后俄周,在測(cè)試項(xiàng)目里pod update一下,幾個(gè)子項(xiàng)目都被加進(jìn)項(xiàng)目工程了建丧,查看無(wú)誤就可以將新增的庫(kù)文件push到遠(yuǎn)端倉(cāng)庫(kù)翎朱,并打上新的tag->1.0.0
最后再次使用pod lib lint驗(yàn)證新編輯好的podspec文件艰亮,沒有自身的warning或者error之后迄埃,就可以再次提交到Spec Repo中了,命令跟之前的是一樣的:
驗(yàn)證通過(guò)蕉汪,上傳成功之后者疤,再次到~/.cocoapods/repos/YourPodTestLibrary/目錄下查看,發(fā)現(xiàn)已經(jīng)有0.1.0和1.0.0兩個(gè)版本了:
使用pod search命令查看私有庫(kù)的結(jié)果是:
完成這些之后革砸,在實(shí)際項(xiàng)目中我們就可以選擇使用整個(gè)組件庫(kù)或者是組件庫(kù)的某一個(gè)部分了算利,對(duì)應(yīng)的podfile中添加的內(nèi)容為:

最后介紹一下如何刪除一個(gè)私有Spec Repo泳姐,只需要執(zhí)行一條命令即可

pod repo remove [Private Repo Name]

這樣這個(gè)Spec Repo就在本地刪除了胖秒,我們還是可以通過(guò)

pod repo add [Private Repo Name] [GitHub HTTPS clone URL]

再把它加回來(lái)。
如果我們要?jiǎng)h除私有的Spec Repo下的某個(gè)podspec要怎么操作呢挤渔?此時(shí)無(wú)需借助CocoaPods蚂蕴,只需要cd到對(duì)應(yīng)的Spec Repo目錄下俯邓,如:~/.cocoapods/repos/YourSpecs/目錄稽鞭,刪除庫(kù)目錄:

rm -Rf YourPodTestLibrary

然后將git的變動(dòng)push到遠(yuǎn)端倉(cāng)庫(kù)即可:

git add --all .     #這里有個(gè)"."別漏了
git ci -m "remove unuseful pods"
git push origin master

關(guān)于'pod lint'的補(bǔ)充說(shuō)明

在開發(fā)的過(guò)程中朦蕴,不可避免弟头,我們會(huì)遇到一些警告(好多代碼壓根不是自己寫的赴恨,實(shí)在無(wú)法維護(hù) - -)的情況,出于代碼潔癖雨饺,就是想lint 過(guò)一下额港。可以采用如下方式

pod lib lint --private --use-libraries --allow-warnings

在這里解釋說(shuō)明一下吧:

  • --private 代表私有
  • --use-libraries 解決因?yàn)橐肫渌鹒ramework造成的無(wú)法通過(guò)
  • --allow-warnings 允許警告
    其他肚医,還是要看具體報(bào)錯(cuò)的信息了肠套。use google stackoverflow.
  • 解決引入.pch

歡迎補(bǔ)充风罩。??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末超升,一起剝皮案震驚了整個(gè)濱河市室琢,隨后出現(xiàn)的幾起案子盈滴,更是在濱河造成了極大的恐慌,老刑警劉巖病苗,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硫朦,死亡現(xiàn)場(chǎng)離奇詭異咬展,居然都是意外死亡瞒斩,警方通過(guò)查閱死者的電腦和手機(jī)胸囱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)夺克,“玉大人嚎朽,你說(shuō)我怎么就攤上這事哟忍」埽” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)扔仓。 經(jīng)常有香客問(wèn)我翘簇,道長(zhǎng),這世上最難降的妖魔是什么呜笑? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任叫胁,我火速辦了婚禮曹抬,結(jié)果婚禮上急鳄,老公的妹妹穿的比我還像新娘疾宏。我一直安慰自己坎藐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛀恩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪双谆。 梳的紋絲不亂的頭發(fā)上壳咕,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音顽馋,去河邊找鬼谓厘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛寸谜,可吹牛的內(nèi)容都是我干的竟稳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼熊痴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了愁拭?” 一聲冷哼從身側(cè)響起讲逛,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岭埠,沒想到半個(gè)月后盏混,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惜论,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年许赃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馆类。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡混聊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乾巧,到底是詐尸還是另有隱情句喜,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布沟于,位于F島的核電站咳胃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏旷太。R本人自食惡果不足惜嫉柴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望响鹃。 院中可真熱鬧爬虱,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)冗栗。三九已至,卻和暖如春违寞,著一層夾襖步出監(jiān)牢的瞬間贞瞒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工趁曼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留军浆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓挡闰,卻偏偏與公主長(zhǎng)得像乒融,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摄悯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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