使用Cocoapods創(chuàng)建私有podspec

Cocoapods是非常好用的一個(gè)iOS依賴管理工具磷雇,使用它可以方便的管理和更新項(xiàng)目中所使用到的第三方庫毛好,以及將自己的項(xiàng)目中的公共組件交由它去管理望艺。Cocoapods的介紹及優(yōu)點(diǎn)本文就不在贅述,我開始使用Cocoapods還是在兩年前肌访,那個(gè)時(shí)候它剛剛出現(xiàn)找默,網(wǎng)上的資料還非常的少,就連他們自己的HomePage都十分的簡單吼驶,我就著手嘗試著使用了一下惩激,用它管理起第三方庫確實(shí)是十分的方便順手。后來它有了更強(qiáng)大的功能就是自己創(chuàng)建podspec蟹演,更可以設(shè)置私有的庫风钻。

春節(jié)回來上班,沒有什么任務(wù)做酒请,正好項(xiàng)目中有一些公共組件需要從龐大的項(xiàng)目體系中剝離出來骡技,而且年前項(xiàng)目終于從SVN遷移到了Git,真是喜大普奔,大快人心布朦!這樣項(xiàng)目使用Cocoapods就有了條件囤萤,正好趁著這兩天沒有什么事情做,學(xué)習(xí)一下創(chuàng)建私有的podspec并在項(xiàng)目中部署使用是趴,以及pods的subspec的創(chuàng)建及使用涛舍。

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

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

創(chuàng)建Pod的所需要的項(xiàng)目工程文件右遭,并且有可訪問的項(xiàng)目版本控制地址做盅。

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

本地測試配置好的podspec文件是否可用窘哈。

向私有的Spec Repo中提交podspec。

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

更新維護(hù)podspec滚婉。

在這一系列的步驟中需要?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)境其他方式暫不說明。

創(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了俘侠。這個(gè)master目錄的結(jié)構(gòu)是這個(gè)樣子的

.

├──?Specs

└──?[SPEC_NAME]

└──?[VERSION]

└──?[SPEC_NAME].podspec

因此我們需要?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ù)漂洋,我使用的是CODING遥皂,當(dāng)然還有其他的可供選擇開源中國、Bitbucket以及CSDN Code.

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

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

$?pod?repo?add?WTSpecs?https://coding.net/wtlucky/WTSpecs.git

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

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

創(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è)工具,相關(guān)的文檔介紹是Using Pod Lib Create就拿我創(chuàng)建的podTestLibrary為例子具體講一下這里是如何操作的趴腋,先cd到要?jiǎng)?chuàng)建項(xiàng)目的目錄然后執(zhí)行

$?pod?lib?create?podTestLibrary

之后他會(huì)問你四個(gè)問題吊说,1.是否需要一個(gè)例子工程;2.選擇一個(gè)測試框架于样;3.是否基于View測試疏叨;4.類的前綴;4個(gè)問題的具體介紹可以去看官方文檔穿剖,我這里選擇的是1.yes蚤蔓;2.Specta/Expecta;3.yes糊余;4.PTL秀又。 問完這4個(gè)問題他會(huì)自動(dòng)執(zhí)行pod install命令創(chuàng)建項(xiàng)目并生成依賴。

$?tree?PodTestLibrary?-L?2

PodTestLibrary

├──?Example??????????????????????????????????#demo?APP

│???├──?PodTestLibrary

│???├──?PodTestLibrary.xcodeproj

│???├──?PodTestLibrary.xcworkspace

│???├──?Podfile??????????????????????????????#demo?APP?的依賴描述文件

│???├──?Podfile.lock

│???├──?Pods??????????????????????????????????#demo?APP?的依賴文件

│???└──?Tests

├──?LICENSE???????????????????????????????#開源協(xié)議?默認(rèn)MIT

├──?Pod???????????????????????????????????????#組件的目錄

│???├──?Assets????????????????????????????#資源文件

│???└──?Classes??????????????????????????????#類文件

├──?PodTestLibrary.podspec???????????#第三步要?jiǎng)?chuàng)建的podspec文件

└──?README.md????????????????????????????????#markdown格式的README

9?directories,?5?files

以上是項(xiàng)目生成的目錄結(jié)構(gòu)及相關(guān)介紹贬芥。

接下來就是向Pod文件夾中添加庫文件和資源吐辙,并配置podspec文件,我把一個(gè)網(wǎng)絡(luò)模塊的共有組件放入Pod/Classes中蘸劈,然后進(jìn)入Example文件夾執(zhí)行pod update命令昏苏,再打開項(xiàng)目工程可以看到,剛剛添加的組件已經(jīng)在Pods子工程下Development Pods/PodTestLibrary中了,然后編輯demo工程贤惯,測試組件洼专,我并沒有使用提供的測試框架進(jìn)行測試,這里就先不介紹了孵构。

注:這里需要注意的是每當(dāng)你向Pod中添加了新的文件或者以后更新了podspec的版本都需要重新執(zhí)行一遍pod update命令屁商。

測試無誤后需要將該項(xiàng)目添加并推送到遠(yuǎn)端倉庫,并編輯podspec文件颈墅。

通過Cocoapods創(chuàng)建出來的目錄本身就在本地的Git管理下蜡镶,我們需要做的就是給它添加遠(yuǎn)端倉庫,同樣去GitHub或其他的Git服務(wù)提供商那里創(chuàng)建一個(gè)私有的倉庫恤筛,拿到SSH地址官还,然后cd到PodTestLibrary目錄

$?git?add?.

$?git?commit?-s?-m?"Initial?Commit?of?Library"

$?git?remote?add?origin?git@coding.net:wtlucky/podTestLibrary.git???????????#添加遠(yuǎn)端倉庫

$?git?push?origin?master?????#提交到遠(yuǎn)端倉庫

因?yàn)閜odspec文件中獲取Git版本控制的項(xiàng)目還需要tag號,所以我們要打上一個(gè)tag毒坛,

$?git?tag?-m?"first?release"?"0.1.0"

$?git?push?--tags?????#推送tag到遠(yuǎn)端倉庫

做完這些就可以開始編輯podspec文件了妻枕,它是一個(gè)Ruby的文件,把編輯器的格式改成Ruby就能看到語法高亮粘驰,下面我貼上我的podspec文件,并在后面以注釋的形式說明每個(gè)字段的含義述么,沒有涉及到的字段可以去官方文檔查閱

Pod::Spec.new?do?|s|??s.name?????????????=?"PodTestLibrary"????#名稱??s.version??????????=?"0.1.0"?????????????#版本號??s.summary??????????=?"Just?Testing."?????#簡短介紹蝌数,下面是詳細(xì)介紹??s.description??????=?<<-DESC???????????????????????Testing?Private?Podspec.???????????????????????*?Markdown?format.???????????????????????*?Don't?worry?about?the?indent,?we?strip?it!???????????????????????DESC??s.homepage?????????=?"https://coding.net/u/wtlucky/p/podTestLibrary"???????????????????????????#主頁,這里要填寫可以訪問到的地址,不然驗(yàn)證不通過??#?s.screenshots?????=?"www.example.com/screenshots_1",?"www.example.com/screenshots_2"???????????#截圖??s.license??????????=?'MIT'??????????????#開源協(xié)議??s.author???????????=?{?"wtlucky"?=>?"wtlucky@foxmail.com"?}???????????????????#作者信息??s.source???????????=?{?:git?=>?"https://coding.net/wtlucky/podTestLibrary.git",?:tag?=>?"0.1.0"?}??????#項(xiàng)目地址度秘,這里不支持ssh的地址顶伞,驗(yàn)證不通過,只支持HTTP和HTTPS剑梳,最好使用HTTPS??#?s.social_media_url?=?'https://twitter.com/'???????????????????????#多媒體介紹地址

s.platform?????=?:ios,?'7.0'????????????#支持的平臺及版本

s.requires_arc?=?true???????????????????#是否使用ARC唆貌,如果指定具體文件,則具體的問題使用ARC

s.source_files?=?'Pod/Classes/**/*'?????#代碼源文件地址垢乙,**/*表示Classes目錄及其子目錄下所有文件锨咙,如果有多個(gè)目錄下則用逗號分開,如果需要在項(xiàng)目中分組顯示追逮,這里也要做相應(yīng)的設(shè)置

s.resource_bundles?=?{

'PodTestLibrary'?=>?['Pod/Assets/*.png']

}???????????????????????????????????????#資源文件地址

s.public_header_files?=?'Pod/Classes/**/*.h'???#公開頭文件地址

s.frameworks?=?'UIKit'??????????????????#所需的framework酪刀,多個(gè)用逗號隔開

s.dependency?'AFNetworking',?'~>?2.3'???#依賴關(guān)系,該項(xiàng)目所依賴的其他庫钮孵,如果有多個(gè)需要填寫多個(gè)s.dependency

end

編輯完podspec文件后骂倘,需要驗(yàn)證一下這個(gè)文件是否可用,如果有任何WARNING或者ERROR都是不可以的巴席,它就不能被添加到Spec Repo中历涝,不過xcode的WARNING是可以存在的,驗(yàn)證需要執(zhí)行一下命令

$?pod?lib?lint

當(dāng)你看到

->?PodTestLibrary?(0.1.0)

PodTestLibrary?passed?validation.

時(shí),說明驗(yàn)證通過了荧库,不過這只是這個(gè)podspec文件是合格的堰塌,不一定說明這個(gè)Pod是可以用的,我們需要在本地做一下驗(yàn)證电爹,這就是第四步的內(nèi)容了蔫仙,第四步在具體說明。

創(chuàng)建podspec文件

如果從第二步過來丐箩,已經(jīng)有了現(xiàn)成的項(xiàng)目摇邦,那么就需要給這個(gè)項(xiàng)目創(chuàng)建一個(gè)podspec文件,創(chuàng)建它需要執(zhí)行Cocoapods的另外一個(gè)命令屎勘,官方文檔在這里

$?pod?spec?create?PodTestLibrary?git@coding.net:wtlucky/podTestLibrary.git

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

$?pod?lib?lint

驗(yàn)證無誤就可以進(jìn)入下一步了瓤摧。

本地測試podspec文件

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

platform?:ios,?'7.0'

pod?'PodTestLibrary',?:path?=>?'~/code/Cocoapods/podTest/PodTestLibrary'??????#指定路徑

pod?'PodTestLibrary',?:podspec?=>?'~/code/Cocoapods/podTest/PodTestLibrary/PodTestLibrary.podspec'??#指定podspec文件

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

在項(xiàng)目中編寫代碼片迅,測試庫文件無誤后就可以開始下一步了残邀,提交podspec到Spec Repo中。

向Spec Repo提交podspec

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

$?pod?repo?push?WTSpecs?PodTestLibrary.podspec??#前面是本地Repo名字?后面是podspec名字

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

.

├──?LICENSE

├──?PodTestLibrary

│???└──?0.1.0

│???????└──?PodTestLibrary.podspec

└──?README.md

再去看我們的Spec Repo遠(yuǎn)端倉庫九秀,也有了一次提交,這個(gè)podspec也已經(jīng)被Push上去了粘我。

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

$?pod?search?PodTestLibrary

->?PodTestLibrary?(0.1.0)

Just?Testing.

pod?'PodTestLibrary',?'~>?0.1.0'

-?Homepage:?https://coding.net/u/wtlucky/p/podTestLibrary

-?Source:???https://coding.net/wtlucky/podTestLibrary.git

-?Versions:?0.1.0?[WTSpecs?repo]

這里說的是添加到私有的Repo,如果要添加到Cocoapods的官方庫了都弹,可以使用trunk工具娇豫,具體可以查看官方文檔

使用制作好的Pod

在完成這一系列步驟之后畅厢,我們就可以在正式項(xiàng)目中使用這個(gè)私有的Pod了只需要在項(xiàng)目的Podfile里增加以下一行代碼即可

$?pod?'PodTestLibrary',?'~>?0.1.0'

然后執(zhí)行pod update冯痢,更新庫依賴,然后打卡項(xiàng)目可以看到框杜,我們自己的庫文件已經(jīng)出現(xiàn)在Pods子項(xiàng)目中的Pods子目錄下了浦楣,而不再是Development Pods。

更新維護(hù)podspec

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

我已經(jīng)制作好了PodTestLibrary的0.1.0版本油狂,現(xiàn)在我對他進(jìn)行升級工作历恐,這次我添加了更多的模塊到PodTestLibrary之中,包括工具類专筷,底層Model及UIKit擴(kuò)展等弱贼,這里又嘗試了一下subspec功能,給PodTestLibrary創(chuàng)建了多個(gè)子分支磷蛹。

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

Pod::Spec.new?do?|s|??s.name?????????????=?"PodTestLibrary"??s.version??????????=?"1.0.0"??s.summary??????????=?"Just?Testing."??s.description??????=?<<-DESC???????????????????????Testing?Private?Podspec.???????????????????????*?Markdown?format.???????????????????????*?Don't?worry?about?the?indent,?we?strip?it!???????????????????????DESC??s.homepage?????????=?"https://coding.net/u/wtlucky/p/podTestLibrary"??#?s.screenshots?????=?"www.example.com/screenshots_1",?"www.example.com/screenshots_2"??s.license??????????=?'MIT'??s.author???????????=?{?"wtlucky"?=>?"wtlucky@foxmail.com"?}??s.source???????????=?{?:git?=>?"https://coding.net/wtlucky/podTestLibrary.git",?:tag?=>?"1.0.0"?}??#?s.social_media_url?=?'https://twitter.com/'

s.platform?????=?:ios,?'7.0'

s.requires_arc?=?true

#s.source_files?=?'Pod/Classes/**/*'

#s.resource_bundles?=?{

#??'PodTestLibrary'?=>?['Pod/Assets/*.png']

#}

#s.public_header_files?=?'Pod/Classes/**/*.h'

s.subspec?'NetWorkEngine'?do?|networkEngine|

networkEngine.source_files?=?'Pod/Classes/NetworkEngine/**/*'

networkEngine.public_header_files?=?'Pod/Classes/NetworkEngine/**/*.h'

networkEngine.dependency?'AFNetworking',?'~>?2.3'

end

s.subspec?'DataModel'?do?|dataModel|

dataModel.source_files?=?'Pod/Classes/DataModel/**/*'

dataModel.public_header_files?=?'Pod/Classes/DataModel/**/*.h'

end

s.subspec?'CommonTools'?do?|commonTools|

commonTools.source_files?=?'Pod/Classes/CommonTools/**/*'

commonTools.public_header_files?=?'Pod/Classes/CommonTools/**/*.h'

commonTools.dependency?'OpenUDID',?'~>?1.0.0'

end

s.subspec?'UIKitAddition'?do?|ui|

ui.source_files?=?'Pod/Classes/UIKitAddition/**/*'

ui.public_header_files?=?'Pod/Classes/UIKitAddition/**/*.h'

ui.resource?=?"Pod/Assets/MLSUIKitResource.bundle"

ui.dependency?'PodTestLibrary/CommonTools'

end

s.frameworks?=?'UIKit'

#s.dependency?'AFNetworking',?'~>?2.3'

#s.dependency?'OpenUDID',?'~>?1.0.0'

end

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

編輯完成之后堡纬,在測試項(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中了,命令跟之前是一樣的

$?pod?repo?push?WTSpecs?PodTestLibrary.podspec

之后再次到~/.cocoapods/repos/WTSpecs目錄下查看

.

├──?LICENSE

├──?PodTestLibrary

│???├──?0.1.0

│???│???└──?PodTestLibrary.podspec

│???└──?1.0.0

│???????└──?PodTestLibrary.podspec

└──?README.md

3?directories,?4?files

已經(jīng)有兩個(gè)版本了镜悉,使用pod search查找得到的結(jié)果為

$?pod?search?PodTestLibrary

->?PodTestLibrary?(1.0.0)

Just?Testing.

pod?'PodTestLibrary',?'~>?1.0.0'

-?Homepage:?https://coding.net/u/wtlucky/p/podTestLibrary

-?Source:???https://coding.net/wtlucky/podTestLibrary.git

-?Versions:?1.0.0,?0.1.0?[WTSpecs?repo]

-?Sub?specs:

-?PodTestLibrary/NetWorkEngine?(1.0.0)

-?PodTestLibrary/DataModel?(1.0.0)

-?PodTestLibrary/CommonTools?(1.0.0)

-?PodTestLibrary/UIKitAddition?(1.0.0)

完成這些之后祟辟,在實(shí)際項(xiàng)目中我們就可以選擇使用整個(gè)組件庫或者是組件庫的某一個(gè)部分了,對應(yīng)的Podfile中添加的內(nèi)容為

platform?:ios,?'7.0'

pod?'PodTestLibrary/NetWorkEngine',?'1.0.0'??#使用某一個(gè)部分

pod?'PodTestLibrary/UIKitAddition',?'1.0.0'

pod?'PodTestLibrary',?'1.0.0'???#使用整個(gè)庫

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

$?pod?repo?remove?WTSpecs

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

$?pod?repo?add?WTSpecs?git@coding.net:wtlucky/WTSpecs.git

再把它給加回來。

如果我們要?jiǎng)h除私有Spec Repo下的某一個(gè)podspec怎么操作呢稼锅,此時(shí)無需借助Cocoapods吼具,只需要cd到~/.cocoapods/repos/WTSpecs目錄下,刪掉庫目錄

wtlucky@wtluckydeMacBook-Pro:~/.cocoapods/repos/WTSpecs$?rm?-Rf?PodTestLibrary

然后在將Git的變動(dòng)push到遠(yuǎn)端倉庫即可

wtlucky@wtluckydeMacBook-Pro:~/.cocoapods/repos/WTSpecs$?git?add?--all?.

wtlucky@wtluckydeMacBook-Pro:~/.cocoapods/repos/WTSpecs$?git?ci?-m?"remove?unuseful?pods"

wtlucky@wtluckydeMacBook-Pro:~/.cocoapods/repos/WTSpecs$?git?push?origin?master

參考資料

Private Pods

Creating a Private CocoaPod

Developing Private In-House Libraries with CocoaPods

(本文作者:wtlucky)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缰贝,一起剝皮案震驚了整個(gè)濱河市馍悟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剩晴,老刑警劉巖锣咒,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赞弥,居然都是意外死亡毅整,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門绽左,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悼嫉,“玉大人,你說我怎么就攤上這事拼窥∠访铮” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵鲁纠,是天一觀的道長总棵。 經(jīng)常有香客問我,道長改含,這世上最難降的妖魔是什么情龄? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮捍壤,結(jié)果婚禮上骤视,老公的妹妹穿的比我還像新娘。我一直安慰自己鹃觉,他們只是感情好专酗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盗扇,像睡著了一般笼裳。 火紅的嫁衣襯著肌膚如雪唯卖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天躬柬,我揣著相機(jī)與錄音拜轨,去河邊找鬼。 笑死允青,一個(gè)胖子當(dāng)著我的面吹牛橄碾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瞧栗!你這毒婦竟也來了苍日?” 一聲冷哼從身側(cè)響起絮蒿,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悼瓮,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年艰猬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了横堡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冠桃,死狀恐怖命贴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情食听,我是刑警寧澤胸蛛,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站樱报,受9級特大地震影響胚泌,放射性物質(zhì)發(fā)生泄漏肃弟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一零蓉、第九天 我趴在偏房一處隱蔽的房頂上張望笤受。 院中可真熱鬧,春花似錦敌蜂、人聲如沸箩兽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汗贫。三九已至身坐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間落包,已是汗流浹背部蛇。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咐蝇,地道東北人涯鲁。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像有序,于是被迫代替她去往敵國和親抹腿。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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