2014年11月28日金曜日

UIWebViewのzoomScale


UIWebViewのzoomScaleプロパティーzoomScaleでは、その時点のzoomScaleを得ることができない。
UIWebViewDelegateのscrollViewDidEndZoomingで通知されるscaleを保存しておく。

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView
                                    withView:(UIView *)view atScale:(float)scale
{
    NSLog(@"Zoomscale %f",scale);
}


iOS8 Enterpriseアプリ配布 (OTA) でインストールできない


Enterpriseアプリ配布でiOS8でインストールが完了しなくなりました。
どうやらprovisioning profileになんらかの問題が発生しているようです。

まずはデバイスの再起動を試す。(もしかしたらSafariの再起動だけでもよいか?
いろいろ設定を変えて試したあとは、ときどき再起動してみるのがよいでしょう。

Xcode>Preference>Accounts>View Details...でprovisioning profilesを同期し、期限切れ等がないかチェック。

plistのアイコンのパスに誤りがないがチェック。full-size-imageのパスに誤りがあるとインストールが完了しないようです。


MIME type に application/octet-stream が設定されているかチェック。なければ追加。これが必須か確認していませんが、やっておいて損はないでしょう。

デバイスをMacに接続し、コンソールログを見ながらインストールを実行し、インストール中に発生しているエラーなどをチェックする。
Xcode ⇨ Window ⇨ デバイス選択 ⇨ 右ペイン左下の△アイコンクリック

itunesstored[1016] <Warning>: LoadExternalDownloadManifestOperation: Ignore manifest download, already have bundleID: {bundleID}

このエラーが出ている場合はplistの設定を変更してもそれを読み込んでくれないようです。
plistのbundle-identifierを一時的に変更(末尾に"temp"を追加するなど)し、インストール再実行。このエラーが出なくなったらbundle-identifierを元に戻す。
私は試していませんが、一般>リセット>ホーム画面のレイアウトをリセットでも対処できるようです。
参考: iOS 8 - Can't Install Enterprise App

以下のようなエラーが見つかりましたが、provisioning profileになんらかの問題があることが起因していると思われます。
XcodeのGeneral>Team、Build Settings>Code Signingの設定をチェックし、再ビルドを行う。Xcode5の場合はXcode6でビルドしてみる。

<Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
<Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument


<Warning>: LSInstallProgress: In observeValueForKeyPath:fractionCompleted could not find parent progress for {app-url}, it may have been removed

<Error>: 0x101ccc000 -[MICodeSigningVerifier performValidationWithError:]: 186: Failed to verify code signature of <MIExecutableBundle : path = /private/var/mobile/Library/Caches/com.apple.mobile.installd.staging/temp.HCjGx1/extracted/Payload/MyApp.app identifier = {appID} type = 4> : 0xe8008015 (Signer did not match any installed provisioning profile)
<Error>: 0x101ccc000 -[MIInstaller performInstallationWithError:]: Verification stage failed

参考: <Error>: Could not set socket option SO_OPPORTUNISTIC


まだダメな場合は、デバイスを再起動してみる。

ついでながら、Xcode6.1に新規にデバイスを追加したときに”digest is missing”のエラーが発生しました。
接続時になんらかのdigestが作成されるが、それがすぐにはXcodeに反映されない、といったところでしょうか。

Xcode を再起動、iPhone を再接続で解決します。

2014年11月16日日曜日

YosemiteにアップデートしたらMailがクラッシュする

YosemiteにアップデートしたらMailがクラッシュする

YosemiteにアップデートしたらMailがクラッシュするようになりました。
こんなエラーメッセージが出ます。
Terminating app due to exception while holding database lock 'NSInternalInconsistencyException',

私の場合はインターネットアカウントでメールアカウントを一旦無効にすると起動するようになり、順次アカウントを有効にすることで戻すことで回復しました。問題のあるアカウントが有効になっていると、クラッシュが再発します。

参考: Fix Mail crashing after upgrading to Yosemite

Mailをセーフモードで起動する方法も書かれています。
Mail起動直後にシフトキーを押し、起動が完了するまで押し続けます。ウインドウが表示されてもすぐにはシフトキーを離さず、初期化が完全に終わるのを待ちます。
通常は前回選択されていたメールが選択状態になりますが、セーフモードの場合は未選択状態で起動します。前回選択されていたメールがエラーの原因の場合に有効です。
私の場合もこれで一回だけ回復したのですが、しばらくしたらクラッシュが再発するようになりました。

OSをセーフモードで起動し、iMailのウインドウ位置などを保存したデータを消す、という方法も書かれています。この保存データに問題がある場合に有効です。
・アプリ起動時にチャイム音直後にシフトキーを押し、しばらく押し続ける。
・起動後、Finder>移動でメニューを表示、optionキーを押しながらLibrayを選択。
・Containers > com.apple.mail > Data > Library > Saved Application State folderへ移動。
・com.apple.mail.savedStateを削除。

Xcode process launch failed: Security

新しいiPhone6に開発中のアプリをインストールしたらこんなエラーでアプリが起動できない。
Xcode process launch failed: Security

このメッセージが出る場合、アプリはすでにデバイスにインストールされている。
アプリアイコンをタップすると、アプリ起動を許可するか警告が出るので、"yes"とすると起動が可能になる。

参考: Xcode process launch failed: Security