CocoaPods 集成和使用

一、iOS和OSX中添加第三方依賴(lài)庫(kù)

  • CocoaPods 和 Carthage 作為 iOS 和 OS X 下的第三方庫(kù)管理工具缸榄,通過(guò) CocoaPods 和 Carthage 可以方便的為項(xiàng)目添加第三方依賴(lài)庫(kù)渤弛。方便管理其版本的同時(shí),也大大的提高了開(kāi)發(fā)效率甚带。下文中僅以 Cocoapods 為主介紹其環(huán)境集成和使用她肯。

1.1 CocoaPods介紹

  • CocoaPods 作為一個(gè)提供中心倉(cāng)庫(kù)的第三方庫(kù)管理工具,可以方便的添加第三方庫(kù)的依賴(lài)并自動(dòng)完成對(duì)第三方庫(kù)的配置鹰贵。利用 CocoaPods 還可以集成自己發(fā)布的開(kāi)源庫(kù)和創(chuàng)建的私有庫(kù)晴氨。
  • CocoaPods 添加第三方依賴(lài)庫(kù)時(shí),會(huì)自動(dòng)創(chuàng)建一個(gè)新的workspace,主項(xiàng)目添加的所有依賴(lài)庫(kù)都放在自動(dòng)創(chuàng)建的Pods項(xiàng)目中碉输,讓主項(xiàng)目依賴(lài)Pods項(xiàng)目籽前。

1.2 Carthage介紹

  • Carthage 是一個(gè)去中心化的第三方庫(kù)管理工具。相對(duì)于 CocoaPods 來(lái)說(shuō)敷钾,Carthage 使用更加簡(jiǎn)單聚假。
  • Carthage 管理第三方依賴(lài)庫(kù)時(shí),不會(huì)過(guò)多的入侵主項(xiàng)目的項(xiàng)目結(jié)構(gòu)闰非,添加依賴(lài)完成的項(xiàng)目相對(duì) CocoaPods 比較干凈膘格。添加的依賴(lài)庫(kù)會(huì)自動(dòng)編譯為Dynamic framework。
  • 可以與通過(guò) CocoaPods 添加依賴(lài)的項(xiàng)目無(wú)縫對(duì)接财松。
  • Carthage iOS8+瘪贱。

1.3 CocoaPods 和 Carthage 優(yōu)缺點(diǎn)

  • CocoaPods
    • 優(yōu)點(diǎn):
      • 第三方庫(kù)豐富
      • 工具功能豐富、完善
    • 缺點(diǎn):
      • 需要更新中心倉(cāng)庫(kù)(這里說(shuō)的倉(cāng)庫(kù)辆毡,不是github上所有托管庫(kù)的代碼庫(kù)的集合菜秦,而是github上托管的所有開(kāi)源倉(cāng)庫(kù)的索引集合),并且每次更新需要連接中心倉(cāng)庫(kù)比較耗時(shí)
      • 發(fā)布第三方庫(kù)到 CocoaPods 操作繁瑣
      • 對(duì)主工程項(xiàng)目結(jié)構(gòu)入侵較多
  • Carthage
    • 優(yōu)點(diǎn):
      • 去中心化舶掖,使用時(shí)只需要更新具體的庫(kù)
      • 直接加載 framework 編譯耗時(shí)短
      • 不改變主工程項(xiàng)目結(jié)構(gòu)
    • 缺點(diǎn):
      • 第三方庫(kù)有限
      • 僅支持iOS8+
      • 工具功能不完善
      • 無(wú)法再主工程中直接查看第三方庫(kù)源碼

二球昨、CocoaPods環(huán)境集成和使用

2.1 配置 ruby 環(huán)境

2.2 安裝 CocoaPods

  • 安裝 CocoaPods 之前,如果 gem 版本太老共螺,需要升級(jí)gem:

    • 更新gem sudo gem update --system
    • 查看gem版本 gem -v
  • 安裝 CocoaPods

    • sudo gem install cocoapods // 安裝或更新

    • pod setup // 在~/.cocoapods/repos中創(chuàng)建一個(gè)目錄用來(lái)保存spec-repos,并從https://github.com/CocoaPods/Specs拉取Specs到本地该肴,如果~/.cocoapods/repos目錄已經(jīng)存在,則會(huì)將當(dāng)前目錄下的倉(cāng)庫(kù)更新到最新版本藐不。

    • 報(bào)錯(cuò)1:

      • 對(duì)于執(zhí)行安裝過(guò)程中的報(bào)錯(cuò)匀哄,這里如果報(bào)Operation not permitted - /usr/bin/xcodeproj。
      • 解決方案:
        • sudo gem install -n /usr/local/bin cocoapods
        • pod setup
    • 報(bào)錯(cuò)2:

      • pod setup 失敗
      • 解決方案1:刪除master重新下載
        • pod repo remove master
        • pod setup
      • 解決方案2:
        • 直接從github上clone或者下載一個(gè)Specs到本地雏蛮,重命名為master涎嚼,拷貝到~/.cocoapods/repos目錄下
        • 再次執(zhí)行pod setup驗(yàn)證
  • 更新 CocoaPods

    • sudo gem install cocoapods
  • 安裝指定版本

    • sudo gem install cocoapods -v 1.5.2
  • 安裝預(yù)發(fā)布版本(beta)

    • sudo gem install cocoapods --pre
  • 卸載或者版本回退 CocoaPods

    • sudo gem uninstall cocoapods
  • 版本查看

    • pod --version
  • 備注:近期升級(jí)系統(tǒng) MacOs High Sierra,遇到cocoapods無(wú)法更新repo的問(wèn)題,提示各種權(quán)限和無(wú)法更新的問(wèn)題挑秉,初步確認(rèn)問(wèn)題在ruby環(huán)境法梯,故需升級(jí)ruby,但通過(guò)sudo gem update --system無(wú)法更新ruby衷模,最終的解決辦法鹊汛,安裝rvm,通過(guò)rvm安裝新版本ruby,再安裝cocoapods即可蒲赂。

2.3 給項(xiàng)目添加 CocoaPods 庫(kù)依賴(lài)

  • 方式1:執(zhí)行$ pod init

  • 方式2:直接創(chuàng)建文件

  • 1.在主項(xiàng)目根目錄創(chuàng)建一個(gè)Podfile文件(命名注意:Podfile)

  • 2.編輯Podfile文件格式和內(nèi)容:<Podfile文件的編輯可以選擇CocoaPods App>

    platform:ios, '8.0' // 指定要添加依賴(lài)的主工程的運(yùn)行平臺(tái)阱冶,適配的最低版本
    
    target 'YourApp' do // 指定要添加依賴(lài)的target
    
    pod 'AFNetworking', '3.0.1' // 添加需要依賴(lài)的庫(kù),可以通過(guò)pod search來(lái)搜索github上托管的第三方庫(kù)
    
    end
    
    • 注:編輯完成注意保存

    • 說(shuō)明:關(guān)于指定pod versions

      • pod 'AFNetworking' // 省略版本號(hào)滥嘴,即總是希望使用最新的版本作為依賴(lài)
      • pod 'AFNetworking', '3.0.1' // 指定特定版本號(hào)木蹬,即總是使用指定的特定版本作為依賴(lài)
      • pod 'AFNetworking', '> 3.0.0' // 指定高于3.0.0的任意版本,即總是使用高于3.0.0的任意版本作為依賴(lài)
      • pod 'AFNetworking', '>= 3.0.0' // 指定3.0.0或者高于3.0.0的任意版本若皱,即總是使用3.0.0或者高于3.0.0的任意版本作為依賴(lài)
      • pod 'AFNetworking', '< 3.0.0' // 指定任意低于3.0.0的版本镊叁,即總是使用低于3.0.0的版本作為依賴(lài)
      • pod 'AFNetworking', '<= 3.0.0' // 指定3.0.0版本和任意低于3.0.0的版本,即總是使用3.0.0版本或者低于3.0.0的版本作為依賴(lài)
      • pod 'AFNetworking', '~> 3.0.1' // 指定版本3.0.1及其之后版本中低于3.1.0(不包括3.1.0)的版本
      • pod 'AFNetworking', '~> 3.1' // 指定版本3.1及其之后版本中低于4.0(不包括4.0)的版本
      • pod 'AFNetworking', '~> 0' // 指定版本0及其之后版本中低于1.0的版本

      以上關(guān)于版本指定走触,除了指定特定版本這種方式外晦譬,其他指定版本的方式都是在滿(mǎn)足當(dāng)前約束條件下默認(rèn)使用的約束條件下的最大版本作為依賴(lài)

    • 除了以上指定版本之外,還可以指定pod的master分支作為依賴(lài)版本(指定具體版本的方式好處是指定的版本一般都是tag版本互广,是第三方庫(kù)作者測(cè)試通過(guò)的可發(fā)布的版本敛腌,而指定master作為依賴(lài)時(shí),有可能其中的部分代碼還在測(cè)試和完善階段的作者沒(méi)有發(fā)布的源代碼惫皱,即tag之外的代碼像樊,選擇master作為依賴(lài)版本要慎重。選擇master作為依賴(lài)一般用在團(tuán)隊(duì)開(kāi)發(fā)的私有庫(kù)的 開(kāi)發(fā)模式 中旅敷,或者自己維護(hù)的開(kāi)源庫(kù) 開(kāi)發(fā)模式 中生棍,開(kāi)發(fā)完成后切換到tag版。)

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

      關(guān)于版本指定參考cocoapods.org

  • 3.通過(guò)pod search來(lái)搜索需要依賴(lài)的庫(kù)

    • pod search AFNetworking
  • 4.從本地加載依賴(lài)庫(kù)

  • 5.添加依賴(lài)到主工程

    • pod install// 下載Podfile中的所有依賴(lài)庫(kù)媳谁,并在./Pods路徑下創(chuàng)建一個(gè)Pods庫(kù)工程
    • pod update// 更新依賴(lài)庫(kù)涂滴,如果指定依賴(lài)庫(kù)可以更新具體的第三方依賴(lài)庫(kù)友酱,否則更新所有需要更新的依賴(lài)庫(kù)。
    • 注:二選一
  • 補(bǔ)充

    • pod update 在執(zhí)行的時(shí)候每次都會(huì)先執(zhí)行pod repo update氢妈,比較耗時(shí)粹污,所以一般選擇不更新本地倉(cāng)庫(kù)使用pod update --no-repo-update

    • 當(dāng)github上托管的第三方庫(kù)有更新版本時(shí),需要更新本地倉(cāng)庫(kù):

      • pod repo update// 不指定具體倉(cāng)庫(kù)首量,會(huì)自動(dòng)更新所有倉(cāng)庫(kù)

      或者

      • pod repo update master// 指定更新master
    • 同時(shí)給多個(gè)target添加依賴(lài)庫(kù)的壮吩,例如TestTarget / AppExtensionTarget,只需要在Podfile文件中添加多個(gè)target.

    platform:ios, '8.0'
    target 'YourApp' do 
    
    // add lib
    
    end
    
    target 'YourTestTarget' do
    
    // add lib
    
    end
    

2.4 解除項(xiàng)目 CocoaPods 依賴(lài)

  • 刪除本地文件:
    • podfile
    • podfile.lock
    • pods文件夾
  • 刪除工程文件:
    • xcworkspace
  • 刪除項(xiàng)目中的frameworks文件夾下面,pods.xcconfig和libpods.a文件
  • 進(jìn)入target,在build phases中加缘,刪除copy pods resources/Embed pods frameworks/check pods manifest.lock三項(xiàng)
  • 刪除工程中對(duì)第三方庫(kù)的引用

三鸭叙、發(fā)布項(xiàng)目到CocoaPods

  • 很多時(shí)候,我們會(huì)自己造輪子拣宏,如果想托管到github作為第三方庫(kù)在 CocoaPods 中使用沈贝,就需要發(fā)布項(xiàng)目到 CocoaPods
  • 在組件化等項(xiàng)目架構(gòu)的使用方式中,會(huì)需要用到不方便開(kāi)源的私有庫(kù)勋乾,如果想通過(guò) CocoaPods 方便的集成和管理宋下,就需要通過(guò) CocoaPods 創(chuàng)建私有庫(kù)

3.1 發(fā)布開(kāi)源庫(kù)到 CocoaPods

  • 發(fā)布開(kāi)源庫(kù)到 CocoaPods 不止一種方式,這里通過(guò)Pod trunk的方式發(fā)布開(kāi)源庫(kù)到 CocoaPods

說(shuō)明:使用pod trunk 發(fā)布項(xiàng)目到cocoapods需要cocoapods版本高于0.33

1.第三方庫(kù)代碼
  • 編寫(xiě)要開(kāi)源的第三方庫(kù)的代碼辑莫,完成測(cè)試和bug修復(fù)学歧。
2.github創(chuàng)建倉(cāng)庫(kù)
  • 創(chuàng)建一個(gè)和項(xiàng)目名同名的github倉(cāng)庫(kù)。
3.clone github上的倉(cāng)庫(kù)到本地
  • clone 新創(chuàng)建的倉(cāng)庫(kù)到本地各吨。clone的項(xiàng)目一般會(huì)包含LICENSE和README.md文件
4.Xcode創(chuàng)建項(xiàng)目
  • 將編寫(xiě)完成的開(kāi)源庫(kù)代碼文件以文件夾的形式(文件夾一般以開(kāi)源庫(kù)命名)放在clone路徑中枝笨。
  • 開(kāi)源庫(kù)一般提供一個(gè)示例工程,在colne路徑中揭蜒,創(chuàng)建一個(gè)新的xcode項(xiàng)目横浑,一般以demo或者example的方式。并在demo或者example項(xiàng)目的根目錄中引用編寫(xiě)完成的第三方開(kāi)源庫(kù)文件(注:由于開(kāi)源庫(kù)已經(jīng)在當(dāng)前路徑中了屉更,所以xcode項(xiàng)目引用的時(shí)候不要勾選copy it if need)徙融。
  • 編寫(xiě)README.md
5.創(chuàng)建podspec 文件
$ cd clone根目錄
$ pod spec create hellohud
  • 打開(kāi)生成的podspec文件,此處為hellohud.podspec文件
    • podspec編輯參考
    • 注:不要用系統(tǒng)的編輯器打開(kāi)瑰谜,因?yàn)槿绻苯佑孟到y(tǒng)的編輯器打開(kāi)的話(huà)編輯過(guò)程中會(huì)對(duì)符號(hào)自動(dòng)轉(zhuǎn)換編碼欺冀,而導(dǎo)致podspec文件驗(yàn)證通不過(guò)。
Pod::Spec.new do |s|
    s.name         = "hellohud"
    s.version      = "0.0.1"
    s.summary      = "A state bar hud for iOS on window"
    s.homepage     = "https://github.com/username/HelloWindowHud"
    s.license      = "MIT"
    s.author             = { "username" => "username@163.com" }
    s.source       = { :git => "https://github.com/username/HelloWindowHud.git", :tag => s.version }
    s.source_files  = "HelloWindowHud/"
    s.requires_arc = true
    s.platform     = :ios, "7.0"
end
  • 使用#注釋掉不需要的選項(xiàng)

  • 注:podspec中的內(nèi)容填寫(xiě)有比較嚴(yán)格審查制度似舵,如果規(guī)則錯(cuò)誤會(huì)導(dǎo)致podspec文件無(wú)法使用脚猾。

    • name 第三方庫(kù)的名稱(chēng)
    • version 第三方庫(kù)的版本(tag)
    • summary 第三方庫(kù)的摘要
    • homepage 第三方庫(kù)的首頁(yè)
    • license 第三方庫(kù)使用的license
    • author 第三方庫(kù)的作者
    • source 第三方庫(kù)的git版本庫(kù)
    • source__files 第三方庫(kù)的的source_file文件位置
    • requires_arc 是否要求arc
    • platform 第三方庫(kù)支持的平臺(tái)
    • 除了上述基本信息外,還可以指定當(dāng)前庫(kù)需要依賴(lài)的其他庫(kù)砚哗,如果當(dāng)前庫(kù)依賴(lài)的庫(kù)為第三方庫(kù)龙助,需要是已經(jīng)發(fā)布的第三方庫(kù)
  • 注:

    • 1.每個(gè)第三方庫(kù)支持的平臺(tái)不同,所以如果不是支持全平臺(tái)的第三方庫(kù),在platform部分需要做platform說(shuō)明提鸟。
    • 2.source_files 要找對(duì)位置军援,這個(gè)極為重要。一般情況下称勋,clone路徑下面會(huì)包含如下文件:
      • LICENSE
      • README.md
      • DEMO/EXAMPLE
      • 第三方庫(kù)

    這種情況胸哥,source_files就是 'github上的倉(cāng)庫(kù)名/'

注:以上操作可用命令完成

$ pod lib create Proj_name
6.commit項(xiàng)目到github
  • 將已經(jīng)添加了.podspec文件的項(xiàng)目commit
7.給項(xiàng)目打一個(gè)tag
$ cd clone路徑
$ git tag -a '0.0.1' -m 'tag release 0.01'
$ git push --tags
$ git tag // 查看所有的tag
$ git tag -d 0.0.1 // 刪除對(duì)應(yīng)的tag
$ git push origin :0.0.1 //遠(yuǎn)程倉(cāng)庫(kù)刪除tag
8.驗(yàn)證podspec文件是否符合要求
$ pod spec lint HelloWindowHud.podspec // 聯(lián)網(wǎng)
$ pod lib lint // 不聯(lián)網(wǎng)
  • 報(bào)錯(cuò):
    • echo "2.3" > .swift-version.
      • 解決:直接運(yùn)行$ echo "2.3" > .swift-version
9.注冊(cè)pod trunk
/**
* @param email 用戶(hù)郵箱 
* @param username 用戶(hù)名
* @param description 設(shè)備描述
*/
$ pod trunk register email 'username' --description='device description'
// pod trunk register emailemail@163.com hellohud

查看賬戶(hù)信息
$ pod trunk me
10.podspec驗(yàn)證沒(méi)有報(bào)錯(cuò)赡鲜,則發(fā)布
$ pod trunk push HelloWindowHud.podspec
  • 報(bào)錯(cuò):
    • 對(duì)于1.2.0版本的 CocoaPods 會(huì)導(dǎo)致無(wú)法發(fā)布podspec而報(bào)錯(cuò)
11.第一次發(fā)布需要去認(rèn)領(lǐng)podspec

認(rèn)領(lǐng)podspec

  • 新項(xiàng)目第一發(fā)布需要認(rèn)領(lǐng)空厌。
  • 認(rèn)領(lǐng)時(shí),輸入cocoapods的username 银酬、 email 以及認(rèn)領(lǐng)的第三方庫(kù)名字即可嘲更。
  • 認(rèn)領(lǐng)成功的同時(shí),即表示發(fā)布成功揩瞪。
更新pod 搜索自己的第三方庫(kù)即可
$ pod repo update 
$ pod search CodePush
  • 注:在做搜索之前最好清一下cocoapods的緩存赋朦,否則會(huì)搜不到最新發(fā)布的庫(kù)
    • $ rm ~/Library/Caches/CocoaPods/search_index.json
    • 最后執(zhí)行 pod search
  • [挖坑填坑:上述操作中5、6李破、7順序不能換]

3.2 利用 CocoaPods 創(chuàng)建私有庫(kù)

1.創(chuàng)建私有庫(kù)git倉(cāng)庫(kù)(托管私有庫(kù)源碼) & 創(chuàng)建私有spec倉(cāng)庫(kù)(和CocoaPods的podspec倉(cāng)庫(kù)相同)
2.將私有 spec 倉(cāng)庫(kù)添加到 CocoaPods
  • $ pod repo add [spec倉(cāng)庫(kù)名] [私有spec倉(cāng)庫(kù)地址]
  • 查看clone到本地的私有spec倉(cāng)庫(kù) ~/.cocoapods/repos
3.創(chuàng)建私有庫(kù)及編輯podspec文件和校驗(yàn)宠哄,參考 CocoaPods 發(fā)布開(kāi)源庫(kù)中的操作 1 - 9 完全相同
  • 注意:

    • 做spec文件校驗(yàn)的時(shí)候,由于我們要?jiǎng)?chuàng)建的是私有庫(kù)嗤攻,除了開(kāi)啟訪問(wèn)權(quán)限的成員外毛嫉,任何人無(wú)法直接訪問(wèn),這種情況會(huì)有警告 - WARN | url: The URL () is not reachable.,避免警告的操作
    • pod spec lint CodeLog.podspec --private

    或者

    • pod spec lint CodeLog.podspec --allow-warnings
4.將私有庫(kù)的pospec文件提交到私有 spec 倉(cāng)庫(kù)
  • cd 私有代碼庫(kù)clone路徑// 目的是可以拿到其中的.podspec文件

  • $ pod repo push [spec倉(cāng)庫(kù)名] [私有庫(kù).podspec文件] // 將.podspec文件提交到私有spec倉(cāng)庫(kù), 當(dāng)遇到有警告而導(dǎo)致的驗(yàn)證失敗時(shí)屯曹,可以后面加--allow-warnings參數(shù)避免警告

  • 提交完成狱庇,執(zhí)行pod search驗(yàn)證即可惊畏。

5.集成私有庫(kù)
  • 如果 Podfile 中不指定 source 的地址恶耽,則默認(rèn)github的specs地址,但私有庫(kù)的spec地址為自己創(chuàng)建的私有 spec 地址颜启,所以包含私有庫(kù)的 Podfile 文件要指定私有庫(kù)podspec文件的私有 spec 倉(cāng)庫(kù)地址偷俭。如果指定 source 的地址并且主工程同時(shí)包含開(kāi)源庫(kù)和私有庫(kù),則需要同時(shí)指定私有spec地址和CocoaPods的spec地址缰盏,這樣在添加依賴(lài)庫(kù)的時(shí)候會(huì)同時(shí)從私有 specs 地址和 CocoaPods 的 specs 地址添加涌萤。
    • source 'https://github.com/CocoaPods/Specs.git'
    • source 'http://git.oschina.net/username/CodeSpec.git'
source 'https://github.com/CocoaPods/Specs.git'
source 'http://git.oschina.net/username/CodeSpec.git'

platform:ios, '8.0'

target 'demo' do

// 私有庫(kù)
// github托管的開(kāi)源庫(kù)

end

備注:

  • 私有庫(kù)引用私有庫(kù),驗(yàn)證podspec口猜,需加上私有庫(kù)的spec地址
pod lib lint --sources='https://github.com/CocoaPods/Specs.git,私有spec倉(cāng)庫(kù)地址' // 本地驗(yàn)證
pod spec lint --sources='https://github.com/CocoaPods/Specs.git,私有spec倉(cāng)庫(kù)地址' // 遠(yuǎn)程驗(yàn)證负溪,也可以加上--allow-warnings去掉警告
  • 利用podSpec文件將庫(kù)文件分為不同的虛擬文件夾,方便對(duì)功能或者類(lèi)文件進(jìn)行針對(duì)性的分類(lèi)
s.subspec 'ClassA' do |classa|
      classa.source_files = 'tt/Classes/ClassA/*'
end

分類(lèi)后的虛擬文件夾為ClassA,其文件來(lái)源在路徑tt/Classes/ClassA/*中

  • 私有庫(kù)更新:

    • 對(duì)于不需要新增tag的情況济炎,需刪除原git倉(cāng)庫(kù)中的tag川抡,然后創(chuàng)建相同的tag上傳,這種方式须尚,在私有庫(kù)更新完使用時(shí)崖堤,需要清空cocoapods緩存
      pod repo update 私有spec倉(cāng)庫(kù)名 // 更新私有倉(cāng)庫(kù)spec
      pod cache list // 查看cocoapods 緩存
      pod cache clean 私有庫(kù)名字 // 清除對(duì)應(yīng)私有庫(kù)的緩存
      Podfile中侍咱,去掉對(duì)私有庫(kù)的依賴(lài),然后pod update
      Podfile中密幔,添加對(duì)私有庫(kù)的依賴(lài)楔脯,然后pod update
    • 對(duì)于新增tag的情況,直接新增tag即可
      pod repo push [spec倉(cāng)庫(kù)名] [私有庫(kù).spec]
  • 【報(bào)錯(cuò)】[!] An unexpected version directory Classes was encountered for the /Users/name/.cocoapods/repos/gitee-yourname-test/test Pod in the gitee-yourname-test repository.

    • 解決方式:進(jìn)入/Users/name/.cocoapods/repos/gitee-yourname-test胯甩,刪除gitee-yourname-test文件夾就可以了

參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昧廷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子偎箫,更是在濱河造成了極大的恐慌麸粮,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镜廉,死亡現(xiàn)場(chǎng)離奇詭異弄诲,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)娇唯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)齐遵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人塔插,你說(shuō)我怎么就攤上這事梗摇。” “怎么了想许?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵伶授,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我流纹,道長(zhǎng)糜烹,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任漱凝,我火速辦了婚禮疮蹦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茸炒。我一直安慰自己愕乎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布壁公。 她就那樣靜靜地躺著感论,像睡著了一般。 火紅的嫁衣襯著肌膚如雪紊册。 梳的紋絲不亂的頭發(fā)上比肄,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼薪前。 笑死润努,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的示括。 我是一名探鬼主播铺浇,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垛膝!你這毒婦竟也來(lái)了鳍侣?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吼拥,失蹤者是張志新(化名)和其女友劉穎优训,沒(méi)想到半個(gè)月后询件,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年水孩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了氛琢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亭枷。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稚矿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出敛助,到底是詐尸還是另有隱情粗卜,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布纳击,位于F島的核電站续扔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏焕数。R本人自食惡果不足惜纱昧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望百匆。 院中可真熱鬧砌些,春花似錦呜投、人聲如沸加匈。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雕拼。三九已至,卻和暖如春粘招,著一層夾襖步出監(jiān)牢的瞬間啥寇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辑甜,地道東北人衰絮。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像磷醋,于是被迫代替她去往敵國(guó)和親猫牡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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