2

plugin.xmlの一部

<!-- ios -->
<platform name="ios">

    <config-file target="config.xml" parent="/*">
        <feature name="MyPlugin">
            <param name="ios-package" value="MyPlugin"/>
        </feature>
    </config-file>

    <!--this need to be added to the .plist file-->
    <config-file target="*-Info.plist" parent="UIBackgroundModes">
        <array>
            <string>location</string>
        </array>
    </config-file>

    <header-file src="src/ios/MyPlugin.h" />
    <source-file src="src/ios/MyPlugin.m" />
</platform>

左側はプラグインをインストールする前、右側はインストール後です:

違い

前に見たように:

<key>NSMainNibFile</key>
<string></string>
<key>NSMainNibFile~ipad</key>
<string></string>

以降

<key>NSMainNibFile</key>
<string>

    </string>
<key>NSMainNibFile~ipad</key>
<string>

    </string>

なんと大きな違いでしょう!どこから来たのかわからない空白を削除すると、起動後にクラッシュすることはありません!

iOS 6 シミュレータ出力 (ただし、デバイスでも同じです)

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/myusername/Library/Application Support/iPhone Simulator/6.0/Applications/F4FDE3C4-D7A8-440F-866D-D0DECD79E2F5/My.app> (loaded)' with name '

    ''
*** First throw call stack:
(0xea012 0x2848e7e 0xe9deb 0x540fac 0x54298d 0x324ceb 0x325002 0x323ed6 0x335315 0x33624b 0x327cf8 0x367adf9 0x367aad0 0x5fbf5 0x5f962 0x90bb6 0x8ff44 0x8fe1b 0x3237da 0x32565c 0x1fe3c 0x1fd9d)
libc++abi.dylib: terminate called throwing an exception
(lldb) 

Cordova / Phonegap のバグだと思いますが、上司は喜んでいません。これを解決する方法は?.plist は、コマンド ラインから起動するたびに再生成されるため、手動で編集することはできません。

ドキュメントが見つかりません。これだけです。1回だけ書いたのに、なぜ自分の場所が4回追加されるのかわかりません。

編集:コマンドラインからプラグインをインストールした後(ただし、コンパイルまたは実行はしない)、plistは次のようになります。

<key>NSMainNibFile</key>
<string>

</string>
<key>NSMainNibFile~ipad</key>
<string>

</string>
<key>UIBackgroundModes</key>
<array>
  <string>location</string>
</array>


$ phonegap build ios 


<key>NSMainNibFile</key>
<string>

</string>
<key>NSMainNibFile~ipad</key>
<string>

</string>
<key>UIBackgroundModes</key>
<array>
  <string>location</string>
  <string>location</string>
</array>

-observe: 場所が追加された行があります!

$ phonegap run ios
[phonegap] detecting iOS SDK environment...
[phonegap] using the local environment
[phonegap] compiling iOS...
[phonegap] successfully compiled iOS app
[phonegap] trying to install app onto device
[phonegap] no device was found
[phonegap] trying to install app onto emulator
[phonegap] successfully installed onto emulator

plist は 2 回クリアされます。それらは 2 回クリアされ、最後に再度追加されます。plist は次のようになります。

<key>NSMainNibFile</key>
<string>

</string>
<key>NSMainNibFile~ipad</key>
<string>

</string>
<key>UIBackgroundModes</key>
<array>
  <string>location</string>
  <string>location</string>
  <string>location</string>
  <string>location</string>
  <string>location</string>
</array>

編集2:

cordova prepare

ランダムに空白をクリアし、<string></string>常に UIBackgroundModes 配列に追加<string>location</string>ます!

4

3 に答える 3

4

はい、これは plist ファイルのプラグイン構成設定の Cordova の処理におけるバグのようです。

重複した配列エントリは煩わしいですが、ビルドを壊したり、アプリに影響を与えたりするべきではありません。ただし、NSMainNibFile* 設定に追加された空白により、XCode が表示されたNSInternalInconsistencyExceptionエラー メッセージでビルドに失敗します。

これが修正されるまで、次のフック スクリプトを使用して回避しています.cordova/hooks/after_platform_add/patch_plist.sh

#!/bin/bash
if pushd platforms/ios 2>/dev/null ; then   # iOS-specific actions...
    # Patch *-Info.plist
    PROJNAME=$(echo *.xcodeproj|sed -e 's/\..*//')
    sed -i '' '/<key>NSMainNibFile<\/key>/,/<\/string>/d' $PROJNAME/*-Info.plist
    sed -i '' '/<key>NSMainNibFile~ipad<\/key>/,/<\/string>/d' $PROJNAME/*-Info.plist
    popd
fi

これらの設定は必要ないため、plist から完全に削除されます。それらを削除すると、Cordova がprepare.

スクリプトを実行可能にする必要があります。

chmod a+x .cordova/hooks/after_platform_add/patch_plist.sh

これはplatform add、plist が生成されるときに各コマンドの後に実行する必要があります。そのため、後で次のコマンドを実行して再生成し、パッチを適用する必要があります。

cordova platform rm ios -d
cordova platform add ios -d
于 2013-09-05T10:45:11.387 に答える
0

これらの行をconfig.xmlに追加するだけです

<platform name="ios">
    <config-file platform="ios" target="*-Info.plist" parent="NSMainNibFile">
        <string></string>
    </config-file>
</platform>
<platform name="ios">
    <config-file platform="ios" target="*-Info.plist" parent="NSMainNibFile~ipad">
        <string></string>
    </config-file>
</platform>
于 2017-03-17T13:47:45.313 に答える