Cordova」タグアーカイブ

Cordovaエラー No image found at the path referenced under key “CFBundleIconFile”: Icon.png

Cordovaのエラーではないけど、VisualStudio2015のCorodvaアプリをiOS releaseでビルドして審査に出そうとすると、タイトルのエラーが出て提出できない。

ipaファイルを展開してみると、たしかにrootにicon.pngがない。config.xmlとかいろいろicon.pngを置く場所とかいろいろ試してみたけど、どうしてもrootにicon.pngがコピーされない。

とりあえずの対処法として、ipaファイルを一度展開して、icon.pngをおいて、再度パッケージ化することにした。

## Mac上で
# VSからリモートビルドしたipaを用意、展開
unzip HOGE.ipa
# 署名削除
rm -rf Payload/HOGE.app/_CodeSignature
# icon.pngをrootに設置
cp icon.png ./Payload/HOGE.app/
# 署名
codesign -f -s "MySIGN" ./Payload/HOGE.app --entitlements ../entitlements.plist
# パッケージ化
zip -qr HOGE.ipa Payload

entitlements.plistは

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>PREFIX.ID</string>
<key>com.apple.developer.team-identifier</key>
<string>TEAMID</string>
<key>get-task-allow</key>
<false/>
<key>keychain-access-groups</key>
<array>
<string>PREFIX.ID</string>
</array>
</dict>
</plist>

参考サイト

[Appium] Ad-hoc用のipaファイルを開発者用の署名に差し替えてAppiumで使用できるようにする – Qiita

ipaファイルのProvisioningを差し替える – Qiita

Cordovaアプリを実機Androidでデバッグ開始時に最初に出るエラー

Androidデバッグを開始しようとしたときに、以下のメッセージが出る場合、接続されているAndroidWindowsに登録する必要がある。

Android デバイスに展開できません。接続されているデバイスが見つかりませんでした。デバイスを接続したばかりであれば、認識されるまで数秒かかる場合があります。

以下のサイトがとても参考になる。

Google USB DriverでAndroid端末をWindowsに認識させる – Yahoo!知恵袋

Visual Studio 2015で開発したCordovaアプリを iPhone/iPod touch で起動する

環境

機器 状況
Windows7 Visual Studio 2015でCordovaアプリを開発
Mac ローカルネットワーク上に存在
iPod touch Macに接続

基本的には公式ドキュメント通りにやれば良い。

iOS での Apache Cordova アプリの実行

詰まったところ

Macでリモートエージェントを起動してリモートデバイスでビルドを実行すると以下のエラーが。

No matching provisioning profiles found: No provisioning profiles matching the bundle identifier “aaa.bbb.ccc” were found.

解決

AppIDがクセモノだった

プロビジョニング作成時に登録したAppIDとVisual Studio 2015で指定しているパッケージ名をあわせなければいけない。

f:id:KongariBug:20160113132154p:plain

f:id:KongariBug:20160113132158p:plain

問題は、AppIDの方はハイフンを入れて作れるのだが、Visual Studioの方のパッケージ名にはハイフンを入れられないので、AppIDにハイフンを入れて作ってしまうとはまる。
AppIDをハイフンなしで作りなおして名前を合わせればビルド成功。

ionic + Cordovaで連続でポップアップを開いたときに挙動がおかしくなるのを防ぐ

ionic + cordovaでionicPopupを使ってポップアップを実装したとき、1つ目のポップアップを閉じてすぐに2つ目のポップアップを開くとフォーカスがおかしくなる。

function a() {
var popup = $ionicPopup.show({
title: 'title',
scope: $scope,
buttons: [
{
text: 'OK',
}
]
});
}
function b() {
var popup = $ionicPopup.show({
title: 'title',
scope: $scope,
buttons: [
{
text: 'OK',
onTap: function(e) {
popup.close();
a();
}
}
}
]
});
}
b();

問題はpopup.close()と次のポップアップのレースコンディションのよう。
次のようにtimeoutを十分にとればほぼうまくいく。

function a() {
var popup = $ionicPopup.show({
title: 'title',
scope: $scope,
buttons: [
{
text: 'OK',
}
]
});
}
function b() {
var popup = $ionicPopup.show({
title: 'title',
scope: $scope,
buttons: [
{
text: 'OK',
onTap: function(e) {
popup.close();
$timeout(function () {
a();
}, 250);
}
}
}
]
});
}
b();