[Cordova] 專案名稱裡有中文字時,Cordova 編譯會失敗

[Cordova] 專案名稱裡有中文字時,Cordova 編譯會失敗

原本已經可以成功讓 Cordova app 在 iOS 模擬器上執行

不過今天發現 app 的名稱是英文的,不知道什麼時候把 config.xml 裡的 name 改成英文的了…

把它改回成中文的「圖書館多重帳戶登入」,結果 Android 版本的 app 還可以編譯,

但 iOS 版本的一直編譯不過,出現像下面的錯誤訊息,

訊息裡還有一些亂碼,看起來是名字那串中文變成的:

=== BUILD TARGET 圖書館多重帳戶登入 OF PROJECT 圖書館多重帳戶登入 WITH CONFIGURATION Debug ===
Check dependencies
Signing for "圖書館多重帳戶登入" requires a development team. Select a development team in the project editor.
Code signing is required for product type 'Application' in SDK 'iOS 10.2'
** ARCHIVE FAILED **
The following build commands failed:
Check dependencies
(1 failure)
Error: Error code 65 for command: xcodebuild with args: -xcconfig,/Cordova/MultiLibraryLogin/platforms/ios/cordova/build-debug.xcconfig,-workspace,圖書館多重帳戶登入.xcworkspace,-scheme,圖書館多重帳戶登入,-configuration,Debug,-destination,generic/platform=iOS,-archivePath,圖書館多重帳戶登入.xcarchive,archive,CONFIGURATION_BUILD_DIR=/Cordova/MultiLibraryLogin/platforms/ios/build/device,SHARED_PRECOMPS_DIR=/Cordova/MultiLibraryLogin/platforms/ios/build/sharedpch

 

如果把 config.xml 裡的 name 換回全英文的話,就沒有編譯失敗的問題…

合理懷疑是 Cordova 或用到的 plugin 裡面有人不支援非 ASCII 的檔案路徑…

 

一時沒有好的解法,我希望 app 的名稱顯示是中文的,但這樣又會讓 iOS 編譯失敗…

決定先想辦法暫時避開這個問題…

 

1. 在 config.xml 裡使用英文名稱

為了避免 iOS 編譯失敗,在 config.xml 裡的 name 用英文,例如:

<name>Library Multi-Login</name>

 

2. 使用 cordova prepare 來複製必要檔案

原本我會直接用 cordova build android –release 來編譯,

cordova build 其實就等於 cordova prepare + cordova compile,

其中 cordova prepare 會將 config.xml 的內容複製到各個平台的目錄下:

cordova prepare

 

3. 將 app 名稱改回成中文

上一步的 cordova prepare 會準備好要給各平台編譯用的檔案,

以 Android 平台來說,app 的名稱是放在 platforms/android/res/values/strings.xml 下,例如:

<resources>
<string name="app_name">Library Multi-Login</string>
<string name="launcher_name">@string/app_name</string>
<string name="activity_name">@string/launcher_name</string>
</resources>

 

因此我寫了下面一個小 python 程式,專門用來把 strings.xml 中,

app_name 的內容換成中文字:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import xml.etree.cElementTree as ET
XML_PATH = "platforms/android/res/values/strings.xml"
et = ET.parse(XML_PATH)
root = et.getroot()
root[0].text = "圖書館多重帳戶登入".decode("utf-8")
et.write(XML_PATH, encoding="utf-8")

 

執行 python 程式後,strings.xml 的內容如下:

<resources>
<string name="app_name">圖書館多重帳戶登入</string>
<string name="launcher_name">@string/app_name</string>
<string name="activity_name">@string/launcher_name</string>
</resources>

 

4. 編譯 Android 版本的 app

這時再下 cordova compile 就可以成功編譯出有中文名稱的 app:

cordova compile --release android

 

而 iOS 版本的 app 因為我們在 config.xml 裡寫的是英文的名稱,

因此編譯出來的還是英文的名稱…

雖然還不是很滿意,但目前就先這樣囉~

 

參考資料:

How to have an APP name for each language (Cordova to Android)

Chinese project name can not cordova build ios, but the English name of the project can cordova build ios

 

 

(本頁面已被瀏覽過 263 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料