Godot3編譯和iOS模板

1.Godot源碼

本篇是記錄自己之前研究Godot版本3.x時(shí)的筆記(例如3.5.2),幾個(gè)重要的地址:

?? 在下載的時(shí)候妒貌,一定需要注意分支谐算,防止分支導(dǎo)致的各種報(bào)錯(cuò)

2.Godot3的源碼目錄

下載(git或者直接下載對(duì)應(yīng)Releases源碼)源碼目錄如下:


image.png

platform/iphone目錄中卓舵,就是iOS相關(guān)的核心代碼叫确,可以添加和修改對(duì)應(yīng)的類跳芳,進(jìn)而定制化一些功能,注意启妹,對(duì)于新增的類筛严,一定要在iphone目錄中SCsub文件進(jìn)行添加,例如:

image.png

比如我們利用OC的反射饶米,暫時(shí)對(duì)外暴露一個(gè)AppReflexDelegate桨啃,在文件godot_app_delegate.m中,將+load方法修改如下:

+ (void)load {
    services = [NSMutableArray new];
    
    Class cls = NSClassFromString(@"AppReflexDelegate");
    if (cls && [cls conformsToProtocol:@protocol(UIApplicationDelegate)]) {
        [services addObject:[cls new]];
    }
    
    [services addObject:[AppDelegate new]];
}

3.Godot編譯iOS模板(庫)

3.1 編譯前的準(zhǔn)備

  • Godot的源碼檬输,注意選擇正確的分支
  • 電腦依賴Python3.8以上的Python環(huán)境
  • 安裝Scons照瘾,Scons是一個(gè)開放源碼、以Python語言編碼的自動(dòng)化構(gòu)建工具丧慈。

這里使用Homebrew進(jìn)行安裝:

$ brew install scons
# 如果中間報(bào)錯(cuò)析命,根據(jù)報(bào)錯(cuò)處理即可,我在安裝的時(shí)候逃默,提示了缺少 xcode-select 環(huán)境
# 然后根據(jù)提示鹃愤,安裝了 xcode-select 就好了
$ xcode-select --install
$ xcode-select --version  # 查看版本,沒有安裝Xcode也可以裝 xcode-select

安裝Scons之后完域,可以使用下面的命令查看安裝的目錄和狀態(tài):

$ brew info scons
scons: stable 4.3.0 (bottled)
Substitute for classic 'make' tool with autoconf/automake functionality
https://www.scons.org/
/usr/local/Cellar/scons/4.3.0 (2,274 files, 28.8MB) *
 Poured from bottle on 2022-02-19 at 15:00:53
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/scons.rb
License: MIT
==> Dependencies
Required: python@3.10 ?
==> Analytics
install: 2,221 (30 days), 8,413 (90 days), 34,635 (365 days)
install-on-request: 1,481 (30 days), 6,130 (90 days), 26,127 (365 days)
build-error: 1 (30 days)

3.2 編譯Godot3源碼

進(jìn)入源碼的根目錄下软吐,輸入命令直接進(jìn)行編譯:

# 例如 tools=no 不帶編輯器;-j6是多核CPU編譯吟税,會(huì)快一些
scons p=iphone tools=no target=release_debug arch=arm64 -j6

# 可選的凹耙,編譯x86模擬器架構(gòu),支持模擬器運(yùn)行肠仪,注意加`ios_simulator=yes`肖抱,不然會(huì)失敗
scons p=iphone tools=no target=release_debug arch=x86_64 ios_simulator=yes -j6

# 打包之后,可以將多個(gè)架構(gòu)的.a文件合并成一個(gè)异旧,使用 lipo 命令
lipo -create arm64.a x86_64.a -output fat.a

# 警告??注意意述,CPU的數(shù)量,也可以這么寫: sysctl -n hw.logicalcpu
scons p=iphone --jobs=$(sysctl -n hw.logicalcpu)

參數(shù)說明:
p=iphone指定編譯的目標(biāo)平臺(tái),要列出可用的目標(biāo)平臺(tái)荤崇,可以使用 scons platform=list

$ scons platform=list
scons: Reading SConscript files ...
The following platforms are available:

        iphone
        osx
        server

tools=no這里只是編譯iOS模板的.a文件镐依,所以不包括編輯器和項(xiàng)目管理器。
target=release_debug編譯模式天试,有三種模式:

  • debug : 使用C ++調(diào)試符號(hào)進(jìn)行構(gòu)建, 運(yùn)行時(shí)檢查(執(zhí)行檢查并報(bào)告錯(cuò)誤), 并且?guī)缀鯖]有優(yōu)化,打出的.a包非常大.
  • release_debug : 不使用C ++調(diào)試符號(hào)和優(yōu)化進(jìn)行構(gòu)建, 但保留運(yùn)行時(shí)檢查(執(zhí)行檢查并報(bào)告錯(cuò)誤). 官方編輯器二進(jìn)制文件使用此配置.
  • release : 不使用符號(hào)進(jìn)行構(gòu)建, 具有優(yōu)化功能, 幾乎沒有運(yùn)行時(shí)檢查. 該構(gòu)建目標(biāo)不能與tools=yes 一起使用, 因?yàn)榫庉嬈餍枰恍┱{(diào)試功能和運(yùn)行時(shí)檢查才能運(yùn)行.
    -j6是編譯時(shí)CPU的核心數(shù)量然低,根據(jù)自己電腦的情況來指定喜每。

官方也有上面的詳細(xì)教程:https://docs.godotengine.org/en/stable/
不過官方的教程一般都是最新版本的

3.3 刪除編譯記錄

編譯之后,會(huì)在源碼目錄中雳攘,生成很多中間文件(比如.o)带兜,如果想刪除這些文件,可以執(zhí)行下面的命令:
scons --clean <options>

  • 其中 <options> 是您之前用來構(gòu)建Godot的構(gòu)建選項(xiàng)列表.
  • 也可以直接全部刪除:git clean -fixd
  • 其實(shí)也可以查看其他命令: scons --help

官方文檔關(guān)于Scons的教程:
https://docs.godotengine.org/en/stable/development/compiling/introduction_to_the_buildsystem.html#doc-introduction-to-the-buildsystem

4.生成iOS模板

打開Godot項(xiàng)目吨灭,在Editor-->Export Template Manager中刚照,下載官方的模板,下載之后喧兄,可以打開對(duì)應(yīng)的目錄:

image.png

image.png

先將此iphone.zip備份一下无畔,然后再復(fù)制到某個(gè)地方解壓,加壓后的目錄如下:

image.png

此時(shí)吠冤,將我們編譯好的.a文件替換到對(duì)應(yīng)的架構(gòu)里面浑彰,注意文件名(編譯之后的.a文件名不一定是libgodot.a,改成libgodot.a即可)拯辙。
替換之后郭变,重新壓縮成iphone.zip替換到原來的地方即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涯保,一起剝皮案震驚了整個(gè)濱河市诉濒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夕春,老刑警劉巖未荒,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異撇他,居然都是意外死亡茄猫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門困肩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來划纽,“玉大人,你說我怎么就攤上這事锌畸∮铝樱” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長比默。 經(jīng)常有香客問我幻捏,道長,這世上最難降的妖魔是什么命咐? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任篡九,我火速辦了婚禮,結(jié)果婚禮上醋奠,老公的妹妹穿的比我還像新娘榛臼。我一直安慰自己,他們只是感情好窜司,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布沛善。 她就那樣靜靜地躺著,像睡著了一般塞祈。 火紅的嫁衣襯著肌膚如雪金刁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天议薪,我揣著相機(jī)與錄音尤蛮,去河邊找鬼。 笑死笙蒙,一個(gè)胖子當(dāng)著我的面吹牛抵屿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捅位,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼轧葛,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了艇搀?” 一聲冷哼從身側(cè)響起尿扯,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎焰雕,沒想到半個(gè)月后衷笋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矩屁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年辟宗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吝秕。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泊脐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出烁峭,到底是詐尸還是另有隱情容客,我是刑警寧澤秕铛,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站缩挑,受9級(jí)特大地震影響但两,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜供置,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一谨湘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芥丧,春花似錦悲关、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽艘绍。三九已至赤拒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诱鞠,已是汗流浹背挎挖。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留航夺,地道東北人蕉朵。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像阳掐,于是被迫代替她去往敵國和親始衅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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