原本已經可以成功讓 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

 

 

文章標籤
創作者介紹

亂打一通的心情日記

ephrain 發表在 痞客邦 PIXNET 留言(0) 人氣()