[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)