/*一膝晾、創(chuàng)建.a庫*/
1.創(chuàng)建靜態(tài)庫工程 > 刪除自動(dòng)創(chuàng)建的.m實(shí)現(xiàn)文件及頭文件里的信息 > 導(dǎo)入可能用到的系統(tǒng)庫
2.目標(biāo)工程 > Build Phases > Editor > add build Phases(是否公開頭文件選項(xiàng)) > 設(shè)置公開訪問的頭文件(或在Target Membership中直接設(shè)置)
或
目標(biāo)工程 > Build Phases > 點(diǎn)擊左側(cè)加號(hào) > add build Phases(是否公開頭文件選項(xiàng)) > 設(shè)置公開訪問的頭文件(或在Target Membership中直接設(shè)置)
3.將公開頭文件導(dǎo)入到總的公用頭文件中
4.選擇sdk支持的系統(tǒng)版本
5.參數(shù)配置
Build Settings > Dead Code Stripping設(shè)置為NO
Build Settings > Strip Debug Symbol During Copy 全部設(shè)置為NO
Build Settings > Strip Style設(shè)置為Non-Global Symbols
Build Settings > Base SDK > Latest iOS(iOS 選擇最新的)
6.設(shè)備 和 模擬器 下分別按下command + B進(jìn)行編譯, 編譯成功后 > 在Product目錄下 Show in Finder 查看
7.debug模式下運(yùn)行生成 Debug-iphoneos Debug-iphonesimulator兩個(gè)文件夾
release模式下運(yùn)行生成 Release-iphoneos Release-iphonesimulator文件夾
區(qū)別
Debug和Release赖歌,在我看來主要是針對(duì)其面向的目標(biāo)不同的而進(jìn)行區(qū)分的。
Debug通常稱為調(diào)試版本,通過一系列編譯選項(xiàng)的配合西轩,編譯的結(jié)果通常包含調(diào)試信息,而且不做任何優(yōu)化接奈,以為開發(fā)人員提供強(qiáng)大的應(yīng)用程序調(diào)試能力师骗。
Release通常稱為發(fā)布版本,是為用戶使用的妇智,一般客戶不允許在發(fā)布版本上進(jìn)行調(diào)試滥玷。所以不保存調(diào)試信息,同時(shí)巍棱,它往往進(jìn)行了各種優(yōu)化惑畴,以期達(dá)到代碼最小和速度最優(yōu)。為用戶的使用提供便利
8.為了能在真機(jī)和模擬器上都能運(yùn)行需要使用終端合并
cd到你想要保存合并后文件的目錄下
合并 lipo -create 模擬器.a(路徑) 真機(jī).a(路徑) -output 重命名.a
9.使用時(shí)航徙,直接導(dǎo)入usr下的頭文件和合并的.a文件
10.查看架構(gòu)模式 lipo -info XXX.a i386 armv7 x86_64 arm64(下面有介紹)
arm7: 在最老的支持iOS7的設(shè)備上使用
arm7s: 在iPhone5和5C上使用
arm64: 運(yùn)行于iPhone5S的64位 ARM 處理器 上
i386: 32位模擬器上使用
x86_64: 64為模擬器上使用
注意:向下兼容如贷,arm7版本可以做arm7s上運(yùn)行
需要在對(duì)應(yīng)架構(gòu)設(shè)備上運(yùn)行,才能生成對(duì)應(yīng)架構(gòu)的包
11.建立工程驗(yàn)證
12.如果架構(gòu)報(bào)錯(cuò) Build Settings > BuildActiveArchitecture Only Debug改為NO
/*二到踏、創(chuàng)建.framework庫*/
Framework是資源的集合杠袱,將靜態(tài)庫和其頭文件包含到一個(gè)結(jié)構(gòu)中,讓Xcode可以方便地把它納入到你的項(xiàng)目中窝稿。本質(zhì)也是一個(gè)bundle文件
//(1)使用bundle文件創(chuàng)建framework框架
1.創(chuàng)建一個(gè)Bundle工程
2.目標(biāo)工程 > Build Phases > Editor > add build Phases(是否公開頭文件選項(xiàng)) > 設(shè)置公開訪問的頭文件(或在Target Membership中直接設(shè)置)
或
目標(biāo)工程 > Build Phases > 點(diǎn)擊左側(cè)加號(hào) > add build Phases(是否公開頭文件選項(xiàng)) > 設(shè)置公開訪問的頭文件(或在Target Membership中直接設(shè)置)
3.創(chuàng)建一個(gè)總的公共頭文件 > 導(dǎo)入需要編譯成庫的文件 > 設(shè)置公開頭文件 > 將公開頭文件導(dǎo)入總的頭文件中
4.選擇framework支持的系統(tǒng)版本
5.配置參數(shù)更改
Build Settings > public header > /usr/$(PROJECT_NAME) (公共頭文件在工程目錄下)
Build Settings > Dead Code Stripping設(shè)置為NO
Build Settings > Strip Debug Symbol During Copy 全部設(shè)置為NO
Build Settings > Strip Style設(shè)置為Non-Global Symbols
Build Settings > Base SDK > Latest iOS(iOS 選擇最新的)
Build Settings > Link With Standard Libraries = NO
Build Settings > Packaging > Wrapper Extension = framework.
Build Settings > Mach-O Type(frame 分靜態(tài)庫和動(dòng)態(tài)庫) = Static Library
對(duì)于Mach-O Type可能有兩種情況:(1)選擇 Static Library 打出來的是靜態(tài)庫;(2)選擇 Relocatable Object File 打出來是動(dòng)態(tài)庫楣富。
點(diǎn)擊plist文件 > Bundle OS Type code改為FMWK
6.為了方便找到運(yùn)行后生成的framework,我們提前在項(xiàng)目目錄下創(chuàng)建一個(gè)目錄 build讹躯,用來存放運(yùn)行后生成的文件菩彬;
Build Settings > Per-configuration Build Products Path = $(SRCROOT)/build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7、模擬器和真機(jī)分別編譯 > 合并
8.合并的是framework下的二進(jìn)制文件
cd到你想要保存合并后文件的目錄下
合并命令 lipo -create xxx.framework/xxx ooo.framework/ooo -output ooo潮梯。
9.將合并成功的二進(jìn)制文件替換為framework中的二進(jìn)制文件骗灶,如果沒有用到info.plist文件,可以刪除秉馏,避免在工程中發(fā)生沖突
10.驗(yàn)證 查看架構(gòu)模式 lipo -info XXX.a
//(2)直接創(chuàng)建framework庫
1耙旦、使用xcode直接創(chuàng)建frame工程
2、把需要編譯的庫導(dǎo)入到工程中
3萝究、設(shè)置需要公開的頭文件
Build Phases > Headers > 把文件拖動(dòng)到指定位置(或在Target Membership選擇)公開還是私有(Project為真正私有)
4.選擇framework支持的系統(tǒng)版本
5免都、配置參數(shù)
Build Settings > public header > /usr/$(PROJECT_NAME) (公共頭文件在工程目錄下)
Build Settings > Dead Code Stripping設(shè)置為NO
Build Settings > Strip Debug Symbol During Copy 全部設(shè)置為NO
Build Settings > Strip Style設(shè)置為Non-Global Symbols
Build Settings > Base SDK > Latest iOS(iOS 選擇最新的)
Build Settings > Link With Standard Libraries = NO
Build Settings > Mach-O Type(frame 分靜態(tài)庫和動(dòng)態(tài)庫) = Static Library
對(duì)于Mach-O Type可能有兩種情況:(1)選擇 Static Library 打出來的是靜態(tài)庫;(2)選擇 Relocatable Object File 打出來是動(dòng)態(tài)庫。
6.為了方便找到運(yùn)行后生成的framework帆竹,我們提前在項(xiàng)目目錄下創(chuàng)建一個(gè)目錄 build绕娘,用來存放運(yùn)行后生成的文件
Build Settings > Per-configuration Build Products Path = $(SRCROOT)/build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7、模擬器和真機(jī)分別編譯 > 合并
8.合并的是framework下的二進(jìn)制文件
cd到你想要保存合并后文件的目錄下
合并命令 lipo -create xxx.framework/xxx ooo.framework/ooo -output ooo栽连。
9.將合并成功的二進(jìn)制文件替換為framework中的二進(jìn)制文件险领,如果沒有用到info.plist文件,可以刪除秒紧,避免在工程中發(fā)生沖突
10.驗(yàn)證
//(3)直接在工程中創(chuàng)建framework庫
1.點(diǎn)擊目標(biāo)工程 > 點(diǎn)擊下面左下角加號(hào) > 創(chuàng)建framework
2.參數(shù)配置和合并流程同上(直接創(chuàng)建framework)
區(qū)別
為避免原工程編譯錯(cuò)誤
點(diǎn)擊工程的目標(biāo)文件 General > Embedded Binaries > 刪除你創(chuàng)建的framework
/*注意事項(xiàng)*/
category的處理
category是項(xiàng)目開發(fā)中經(jīng)常用到的绢陌,把category打包成靜態(tài)庫是沒有問題的,但是在使用這個(gè)靜態(tài)庫時(shí)熔恢,
調(diào)用category中的方法時(shí)會(huì)發(fā)生找不到該方法的運(yùn)行時(shí)錯(cuò)誤(selector not recognized)脐湾,
解決的辦法是在使用靜態(tài)庫的工程中配置other linker flags的值為 -ObjC -all_load
對(duì)圖片資源和UI界面xib或nib文件的處理
.a和.framework兩種靜態(tài)庫,通常都是把需要用的到圖片或者xib文件存放在一個(gè)bundle文件中叙淌,而該bundle文件的名字和.a或.framework的名字相同秤掌。
.a文件中無法存放圖片或xib文件,很容易理解鹰霍,但是.framework從本質(zhì)上說也是一個(gè)bundle文件机杜,為什么不把圖片或者xib文件直接放在.framework中而單獨(dú)再創(chuàng)建個(gè)bundle文件呢?
那是因?yàn)閕OS系統(tǒng)不會(huì)去掃描.framework下的圖片等資源文件衅谷,也不會(huì)在項(xiàng)目中顯示椒拗,也就是說即使放在 .framework目錄下,系統(tǒng)根本就不會(huì)去掃描获黔,因此也無法發(fā)現(xiàn)使用蚀苛。
/*開發(fā)UI控件庫*/
在無法看到真實(shí)效果的情況下為iOS開發(fā)一個(gè)UI控件庫是極其困難的
1.創(chuàng)建庫工程,流程同上(第一節(jié)創(chuàng)建.a工程)也可創(chuàng)建framework (存在圖片放入bundel中)
2.創(chuàng)建依賴庫工程
3.關(guān)閉庫工程
4.添加依賴庫玷氏,將你的庫工程xxxx.xcodeproj從Finder中拖到Xcode中依賴工程組下堵未。
/*注意*/
你無法將同一工程在兩個(gè)Xcode窗口中同時(shí)打開,如果你發(fā)現(xiàn)你無法在你的工程中導(dǎo)航到庫工程的話盏触,檢查一下是否庫工程在其他Xcode窗口中打開了渗蟹。
5.連接到靜態(tài)庫
Build Phases > Link Binary With Libraries > 點(diǎn)擊 “+” > Workspace組中選你的.a > 點(diǎn)擊add
Build Phases > Target Dependencies > 選擇你的庫
6.導(dǎo)入庫的頭文件(頭文件路徑)編譯庫块饺,編譯依賴工程
7.報(bào)錯(cuò)問題解決
①刪除添加的庫,重新編譯后導(dǎo)入
②確保編譯路徑相同
Build Settings > Per-configuration Build Products Path >
$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
像這樣使用嵌套工程的好處是你可以對(duì)庫本身做出修改雌芽,而不用離開示例工程授艰,即使你同時(shí)改變兩個(gè)地方的代碼也一樣。每次你編譯工程世落,你都要檢查是否將頭文件的public/project關(guān)系設(shè)置正確淮腾。如果實(shí)例工程中缺失了任何需要的頭文件,它都不能被編譯屉佳。
/*在xcode中直接使用腳本生成framework*/
靜態(tài)庫構(gòu)建過程中添加腳本來創(chuàng)建文件結(jié)構(gòu)
1.打開靜態(tài)庫工程 > Build Phases > 左側(cè) “+” 按鈕 > New Run Script Phases
這一步在build phases部分添加了一個(gè)新的面板谷朝,這允許你在構(gòu)建時(shí)運(yùn)行一個(gè)Bash腳本。你希望讓腳本在build的過程中何時(shí)執(zhí)行武花,就把這個(gè)面板拖動(dòng)到列表中相對(duì)應(yīng)的那一位置圆凰。對(duì)于該framework工程來說,腳本最后執(zhí)行体箕,因此你可以讓它保留在默認(rèn)的位置即可送朱。
2.雙擊面板標(biāo)題欄Run Script,重命名為Build Framework干旁。
根據(jù)frame文件結(jié)構(gòu)構(gòu)件Framework驶沼,此時(shí)不包含二進(jìn)制文件
#set –e確保腳本的任何地方執(zhí)行失敗,則整個(gè)腳本都執(zhí)行失敗争群。
set -e
#導(dǎo)出的文件路徑
export FRAMEWORK_LOCN="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework"
# 創(chuàng)建真是文件路徑
mkdir -p "${FRAMEWORK_LOCN}/Headers"
# 拷貝公共頭文件到framework中
/bin/cp -a "${TARGET_BUILD_DIR}/${PUBLIC_HEADERS_FOLDER_PATH}/" \
"${FRAMEWORK_LOCN}/Headers"
3.多架構(gòu)(Multi-Architecture)編譯
①點(diǎn)擊目標(biāo)工程 > 添加新目標(biāo) > Cross-Platform > Aggregate > next > 命名為Framework
為什么使用集合(Aggregate)目標(biāo)來創(chuàng)建一個(gè)framework呢回怜?為什么這么不直接?因?yàn)镺S X對(duì)庫的支持更好一些换薄,事實(shí)上玉雾,Xcode直接為每一個(gè)OS X工程提供一個(gè)Cocoa Framework編譯目標(biāo)∏嵋基于此复旬,你將使用集合編譯目標(biāo),作為Bash腳本的連接串來創(chuàng)建神奇的framework目錄結(jié)構(gòu)冲泥。
你是不是開始覺得這里的方法有些愚蠢了驹碍?
為了確保每當(dāng)這個(gè)新的framework目標(biāo)被創(chuàng)建時(shí),靜態(tài)鏈接庫都會(huì)被編譯凡恍,你需要往靜態(tài)庫目標(biāo)中添加依賴
②選擇Framework目標(biāo) > Build Phases > Target Dependencies > 點(diǎn)擊 + > 加入你的庫
在庫工程中選擇Framework目標(biāo)志秃,在Build Phases中添加一個(gè)依賴。展開Target Dependencies面板嚼酝,點(diǎn)擊 + 按鈕選擇RWUIControls靜態(tài)庫浮还。
③選擇Framework目標(biāo) > Build Phases > 左側(cè) “+” 按鈕 > New Run Script Phases > 命名MultiPlatform Build
④寫入編譯文件
#set –e確保腳本的任何地方執(zhí)行失敗,則整個(gè)腳本都執(zhí)行失敗闽巩。
set -e
#標(biāo)示 如果已經(jīng)插入腳本 退出
if [ -n "$IYQ_MULTIPLATFORM_BUILD_IN_PROGRESS" ]; then
exit 0
fi
export IYQ_MULTIPLATFORM_BUILD_IN_PROGRESS=1
# 自定義變量
IYQ_FRAMEWORK_NAME=${PROJECT_NAME}
IYQ_INPUT_STATIC_LIB="lib${PROJECT_NAME}.a"
IYQ_FRAMEWORK_LOCATION="${BUILT_PRODUCTS_DIR}/${IYQ_FRAMEWORK_NAME}.framework"
#構(gòu)建靜態(tài)庫 傳參 "${1}"
function build_static_library {
# 重新構(gòu)建庫
xcrun xcodebuild -project "${PROJECT_FILE_PATH}" \
-target "${TARGET_NAME}" \
-configuration "${CONFIGURATION}" \
-sdk "${1}" \
ONLY_ACTIVE_ARCH=NO \
BUILD_DIR="${BUILD_DIR}" \
OBJROOT="${OBJROOT}" \
BUILD_ROOT="${BUILD_ROOT}" \
SYMROOT="${SYMROOT}" $ACTION
}
#合并
function make_fat_library {
xcrun lipo -create "${1}" "${2}" -output "${3}"
}
# 1 正則判斷 真機(jī)還是模擬器 (iphoneos/iphonesimulator)
if [[ "$SDK_NAME" =~ ([A-Za-z]+) ]]; then
IYQ_SDK_PLATFORM=${BASH_REMATCH[1]}
else
echo "Could not find platform name from SDK_NAME: $SDK_NAME"
exit 1
fi
# 2 SDK版本
if [[ "$SDK_NAME" =~ ([0-9]+.*$) ]]; then
IYQ_SDK_VERSION=${BASH_REMATCH[1]}
else
echo "Could not find sdk version from SDK_NAME: $SDK_NAME"
exit 1
fi
# 3 其他平臺(tái)判斷 如果 則 否則
if [ "$IYQ_SDK_PLATFORM" == "iphoneos" ]; then
IYQ_OTHER_PLATFORM=iphonesimulator
else
IYQ_OTHER_PLATFORM=iphoneos
fi
# 4 其他平臺(tái)路徑
if [[ "$BUILT_PRODUCTS_DIR" =~ (.*)$IYQ_SDK_PLATFORM$ ]]; then
IYQ_OTHER_BUILT_PRODUCTS_DIR="${BASH_REMATCH[1]}${IYQ_OTHER_PLATFORM}"
else
echo "Could not find other platform build directory."
exit 1
fi
#調(diào)用上面構(gòu)建函數(shù) 如果當(dāng)前運(yùn)行的是真機(jī)則構(gòu)建模擬器
build_static_library "${IYQ_OTHER_PLATFORM}${IYQ_SDK_VERSION}"
# 如果你現(xiàn)在正在為模擬器編譯钧舌,那么Xcode會(huì)默認(rèn)只在該系統(tǒng)對(duì)應(yīng)的結(jié)構(gòu)下編譯担汤,例如i386 或 x86_64。為了在這兩個(gè)結(jié)構(gòu)下都進(jìn)行編譯洼冻,這里調(diào)用了build_static_library崭歧,基于iphonesimulator SDK重新編譯,確保這兩個(gè)結(jié)構(gòu)都進(jìn)行了編譯碘赖。
if [ "$RW_SDK_PLATFORM" == "iphonesimulator" ]; then
build_static_library "${SDK_NAME}"
fi
# 合并庫
make_fat_library "${BUILT_PRODUCTS_DIR}/${IYQ_INPUT_STATIC_LIB}" \
"${IYQ_OTHER_BUILT_PRODUCTS_DIR}/${IYQ_INPUT_STATIC_LIB}" \
"${IYQ_FRAMEWORK_LOCATION}/${IYQ_FRAMEWORK_NAME}"
# 確保文件存在 相當(dāng)于-dpR,保持文件的連接(d),保持原文件的屬性(p)并作遞歸處理(R)
cp -a "${IYQ_FRAMEWORK_LOCATION}/${IYQ_FRAMEWORK_NAME}" \
"${IYQ_OTHER_BUILT_PRODUCTS_DIR}/${IYQ_FRAMEWORK_NAME}.framework/${IYQ_FRAMEWORK_NAME}"
# 拷貝到指定目錄下
ditto "${IYQ_FRAMEWORK_LOCATION}" "${SRCROOT}/BuildFramework/${IYQ_FRAMEWORK_NAME}.framework"
⑤show in Finder 查看編譯的庫 > 打開終端驗(yàn)證 > 創(chuàng)建工程驗(yàn)證
$ cd XXXX.framework
$ XXX.framework xcrun lipo -info XXXX
iOS app需要在許多不同的CPU架構(gòu)下運(yùn)行:
arm7: 在最老的支持iOS7的設(shè)備上使用
arm7s: 在iPhone5和5C上使用
arm64: 運(yùn)行于iPhone5S的64位 ARM 處理器 上
i386: 32位模擬器上使用
x86_64: 64為模擬器上使用
每個(gè)CPU架構(gòu)都需要不同的二進(jìn)制數(shù)據(jù),當(dāng)你編譯一個(gè)應(yīng)用時(shí)外构,無論你目前正在使用那種架構(gòu)普泡,Xcode都會(huì)正確地依照對(duì)應(yīng)的架構(gòu)編譯。例如审编,如果你想跑在虛擬機(jī)上撼班,Xcode只會(huì)編譯i386版本(或者是64位機(jī)的x86_64版本)。
/*sdk存在圖片等資源文件的情況*/
使用bundle文件封裝圖片垒酬、xib等資源砰嘁,以下流程是使用多目標(biāo)編譯,單獨(dú)創(chuàng)建bundle文件類似
1.選擇庫工程目標(biāo)文件 > 左下角 + > maxOS > Bundle > 自定義命名IYQResources
2.配置幾個(gè)編譯設(shè)置勘究,因?yàn)槟阏趧?chuàng)建一個(gè)在iOS上使用的bundle矮湘,這與默認(rèn)的OS X不同。
選擇Bundle目標(biāo)文件 > Build Settings > Base SDK > Latest iOS (iOS 10.2選擇最新)
Build Settings > Product Name > ${TARGET_NAME}替換為你的工程名XXXX(直接寫工程名就好)
3.選擇Framework目標(biāo) > Build Phases > Target Dependencies > 點(diǎn)擊 + > 加入你的Bundle
4.默認(rèn)情況下口糕,有兩種resolutions(分辨率)的圖片可以產(chǎn)生一些有趣的現(xiàn)象缅阳。
例如,當(dāng)你導(dǎo)入一個(gè)retina@2x版本的圖片時(shí)景描,普通版的和Retina版的將會(huì)合并成一個(gè)多resolution的TIFF(標(biāo)簽圖像文件格式十办,Tagged Image File Format)。
Build Settings > COMBINE_HIDPI_IMAGES設(shè)置為NO
5.如何添加資源文件
①直接拖入
②選擇圖片或其他資源文件 > Target Membership > 選擇bundle目標(biāo)
6.如果想把你的編譯包c(diǎn)opy到指定位置超棺,在腳本后面加入如下代碼
# 拷貝bundle到指定目錄下
ditto "${BUILT_PRODUCTS_DIR}/${IYQ_FRAMEWORK_NAME}.bundle" \
"${SRCROOT}/BuildFramework/${IYQ_FRAMEWORK_NAME}.bundle"
7.如何引用:UIImage *image = [UIImage imageNamed:@"XXXX.bundle/圖片名"];
創(chuàng)建自己的sdk(含編譯腳本)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門侯养,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人澄干,你說我怎么就攤上這事逛揩∧” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵辩稽,是天一觀的道長惧笛。 經(jīng)常有香客問我,道長逞泄,這世上最難降的妖魔是什么患整? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮喷众,結(jié)果婚禮上各谚,老公的妹妹穿的比我還像新娘。我一直安慰自己到千,他們只是感情好昌渤,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著憔四,像睡著了一般膀息。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上了赵,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼妓羊!你這毒婦竟也來了胯究?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對(duì)情侶失蹤躁绸,失蹤者是張志新(化名)和其女友劉穎裕循,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體净刮,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡剥哑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淹父。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片株婴。...
- 正文 年R本政府宣布座哩,位于F島的核電站徒扶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏根穷。R本人自食惡果不足惜姜骡,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屿良。 院中可真熱鬧圈澈,春花似錦、人聲如沸管引。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽褥伴。三九已至,卻和暖如春漾狼,著一層夾襖步出監(jiān)牢的瞬間重慢,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓稽煤,卻偏偏與公主長得像核芽,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酵熙,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 總覽 一轧简、創(chuàng)建自己的SDK - .a靜態(tài)庫 這篇教程將只使用一小部分Objective-C代碼,本文主要講解從開始...
- ——日記星球小牛媽媽訪談錄 395號(hào)星寶寶衣袂飛揚(yáng),三月里款款走來的女子察藐,安靜皮璧、祥和,是我們...
- 最近大半年分飞,我的注意力主要放在三個(gè)領(lǐng)域:短視頻悴务,陌生人社交,KOL的知識(shí)變現(xiàn)譬猫。 “短視頻”是主賽道惨寿。 “陌生人社交...