dentakurouの日記 RSSフィード

2017-11-05 iPhone XのFace IDが次々と突破されるワケ

[]iPhone XのFace IDが次々と突破されるワケ

iPhone Xが発売されてから、Face IDをこーやって突破したというニュースが飛び込んできています。

双子は簡単かもと思えますが、兄弟までも。

アップルの説明では、

Touch IDは他人が突破する確率が5万分の1、新しいFace IDは100万分の1

f:id:dentakurou:20171105212058j:image:w640

と格段に性能が上がっているはずですが、明らかにTouch IDより突破されやすい状況です。

それはなぜか?

この数字にはマジックがあります。

そのまま比較するとFace IDはTouch IDの20倍性能が良いはずです。

顔真似と指紋を真似るのどっちが何倍簡単か?

顔真似のほうが20倍以上簡単ではないか。

ここが語られていないので、20倍性能が良いと錯覚させられています。

ざわちんメイクで突破できそう。

2017-10-29 Xcode9とiOS11で追加されたSafe Area Layoutのバグ

[]Xcode9とiOS11で追加されたSafe Area Layoutのバグ

昨日まとめた「iOS8対応の古いアプリをiPhone Xに対応する手順」を見ながら手持ちのアプリを順次iPhone XおよびiOS11対応していてSafe Area Layoutのバグらしき現象を見つけました。

f:id:dentakurou:20171029162102p:image:w360

こんな感じでNavigation Barの縦幅ぐらいのマージン(C Card Infoラベルの上の余白)が直後のScroll Viewとの間にできています。この現象は縦置きでも置きているので実に嫌です。

発見したのはiPhone5でiOS10.3の実機で。

今回の修正でやったことといえば、

1)Segueを新たに作成し直し

SegueはKindをShow (e.g. Push)にするとNavigation Barが遷移先に適切なサイズで勝手に作成されて便利だったので。

2)Scroll Viewのマージンを設定しなおし

これでStoryboard上に表示されているマージンがSafe Areaからゼロになります。

3)画面一番最初のラベルのマージンを設定しました。

設定しないと明後日の位置になるみたいでScroll View内が真っ白だったので。

 

さらにシミュレータで確認したところ不思議なことに気づきました。

シミュレータの複数のデバイスのiOS9とiOS10で先ほどの症状を確認できましたが、シミュレータでiOS11だと正常。

f:id:dentakurou:20171029162107p:image:w360

iPhone6 iOS11実機でも正常でした。

iOS9とiOS10、というかSafe Area Layoutのバグっぽいです。

2017-10-28 iOS8対応の古いアプリをiPhone Xに対応する手順

[]iOS8対応の古いアプリiPhone Xに対応する手順

App Storeで公開中のiPhone/iPadアプリが、iPhone Xで表示がカメラに隠れてしまうことに気づき、いろいろあーだこーだした修正手順をまとめてみました。

こんな症状を修正します。画面上のナビゲーションバーのアイコンの位置だけ正しい位置なのは、いじわるのフォースを感じますねw

f:id:dentakurou:20171028162316p:image:w640

私の場合は、もっとも古いのでiOS8で動くアプリです。

縦置きは、私のアプリはステータスバーのマージンをすべてとっているのでカメラに隠れず大丈夫でした。

iPhone Xスクリーン下のスリット部分も表示領域になっていませんでした。

しかし、横置きが全滅でした。

もっとも簡単な対処法は、横置きの対応をやめるというのもありだと思います。iPhoneで縦置きと横置きの両方に対応したいアプリってあまり無いと思いますので。大抵どちらかだけですよね。それを言っちゃ技術者魂が許さないので調べました。

 

Safe Area

iOS11の開発環境であるXcode9で導入された表示領域に関する新たな概念です。Safe Areaとは確実に矩形で表示できる領域で、今のところiPhone Xだけこれが大事みたいです。

古いアプリのプロジェクトをXcode9で開くとプロジェクトの設定変更を勧めてきます。自動で変更してからUIViewを選んで右側のSize Inspector(物差しアイコン)を開くと、Layout MarginsにSafe Area Relative Marginsという項目が増えています。

 

手順1)Safe Area Relative Marginsを有効にする

自動でプロジェクトの設定変更をしていたら、この項目はチェックが入っていることがあるみたいですが、その規則性はわかりません。

f:id:dentakurou:20171028162419p:image:w640

最初からXcode9で作成したアプリと変換した古いアプリでは違いがあり、最初からXcode9で作成したアプリにはさらにSafe Area Layout Guideという項目があります。

f:id:dentakurou:20171028162416p:image:w640

この項目を出現させる方法は結局わからなかったのですが、今のところ問題はありませんので次へ。

このままだとまだiPhone Xで表示が欠けてしまいます。調べたら

Safe Areaに対応できるのはiOS9以降から

だからでした。XcodeでSafe Area Relative Marginsにチェック入れて安堵していたらトラップ!

つまり

iOS8対応のアプリiPhone Xに対応できない

まずこれを解消。

 

手順2)Project設定のDeployment TargetをiOS9.0以降に変更する

これでもだめ。新しいアプリと古いアプリのストーリーボードでUIViewをよーく比較観察すると違いを発見。 

 

元iOS8のアプリ

f:id:dentakurou:20171028162257p:image:w640

 

最初からXcode9で作成したアプリ

f:id:dentakurou:20171028162253p:image:w640

違うアプリなのでちょっとわかりにくいですがUIViewの配下にSafe Areaという要素がぶら下がっています。これがないから動かないみたいということに気づきました。知らなかったのですが

インターフェースビルダーにはプロジェクト設定とは別にDeployment Targetがある

これがiOS8のままなのが原因でした。

 

手順3)インターフェースビルダーのDeployment TargetをiOS9以降に変更する

ではどこでこれを出現させるか?というと、左側のツリーでストーリーボードを選んだ状態で、ストーリーボードのなかの要素を何も選ばないで右側のFile Inspectorのアイコンを押します。もしストーリーボードで何か選択されている場合は、一度ストーリーボードの何もないところをクリックしてFile Inspectorを表示します。

Builds For項目のDeployment TargetをiOS9.0以降にします。

f:id:dentakurou:20171028162303p:image:w640

 

手順4)Use Safe Area Layout Guidesを有効にする

これも自動で設定変更したらチェックが入っていると思います。この項目にチェックを入れたら手順1で書いたUIViewのSafe Area Layout Guideという項目が出現するかと思ったのですが出現しませんでした。しかし、さきほどのUIViewの下にSafe Areaの要素が出現して、iPhone Xで正しく表示されるようになりました。

 

以上でiPhone X対応が完了です。右側のマージンまで左のカメラと同じだけ削るのはちょっとどーよって思いますがディスプレイのカーブで矩形ではないからだと思います。

f:id:dentakurou:20171028162308p:image:w640

iOS9やiOS10など比較的新しいアプリはここまでの設定が、アプリによってプロジェクトを開いた時の自動の設定変更だけでほぼできていてるようで、前回「 iPhone Xで表示テストしてわかったこと(その2)」で書いたようにどれか1つマージンを再設定するだけで正しい表示になることもあるし、まちまちです。詳しいことはわかんないですけど。

ここまでの作業よりも大変だったのは、iOS9に変更したことによってpopoverとかUIAlertViewとかが完全にdeprecatedになってたり、segueの仕様も変わっていたり、plist.infoへの記述が厳しくなったり、iTunes connectでアップロードしたら怒られたりでその修正のほうが大変でした。(汗)

まーほとんどのアプリは自分しか使っていないんで、そもそもお前iPhone X買うのかよって話なんですけどねw

2017-10-23 iPhone Xで表示テストしてわかったこと(その2)

[]iPhone Xで表示テストしてわかったこと(その2)

シミュレータで表示のテストして、追加で気づいたことがあります。

以前のXcodeで作ったアプリは、iPhone XのFace IDのカメラで隠れてしまいます。

f:id:dentakurou:20171023201251p:image:w640

ちょっと不思議に思ったのが、Master-DetailのMaster、つまり一覧表の表示はカメラを避けて表示されていました。ところがDetailのほうが隠れてしまう。

ためしにXcode9.0.1で新規にMaster-Detailのアプリを作ってみました。Detailの左右にラベルを貼り付けて、右のラベルは右のマージンをゼロ、左のラベルは左のマージンをゼロにしてみました。

f:id:dentakurou:20171023201247p:image:w360

先ほど隠れてしまったアプリXcodeのバージョンが違うだけで、マージンの設定方法は同様です。

f:id:dentakurou:20171023201242p:image:w640

どういうわけか、ちゃんとカメラのぶんだけマージンができました。ということはXcode9でマージンを設定し直すしかないということです。

試しに気圧日記というアプリの左右のマージンをXcode9.0.1のストーリーボードで消して、もう一度マージンゼロで設定しました。この時に気づいたのですが、以前のマージンゼロはピツピツに端っこじゃないんですよね。

f:id:dentakurou:20171023202823p:image:w360

それで表示すると、、、

f:id:dentakurou:20171023204126p:image:w640

直っている。でもピツピツじゃないぶんだけカメラの内側にマージンがさらに入ってしまっています。

しかもマージンの再設定をしたのはテキストフィールド1つだけです。1つだけ直すと他のマージンも基準が変わるようです。ではiPhone Xにあわせてピツピツにマージンを修正すればよいのか?

ところが問題がありました。

f:id:dentakurou:20171023203633p:image:w640

iPhone8でのマージンの取り方は従来どおり。

ということはiPhone Xにあわせてピタピタにはしないほうがよさそう。

シミュレータバグかもしれないので、まずはiPhone Xの実機がでるタイミングのXcode9でもう一度確認したほうがよさそうです。

ついでに気づいたのが、横置きの時の縦の表示上の長さはiPhone8のほうが1行ほど多い!なぬー!

2017-10-19 iPhone Xで表示テストしてわかったこと

[]iPhone Xで表示テストしてわかったこと

アップルからアプリ開発者宛にXcode9にiPhone Xシミュレータがあるのでテストしてねーとメールが来ていたのでテストしてみました。

シミュレーターも気合が入っていて、ひさしぶりに実機イメージの枠があります。

f:id:dentakurou:20171019194800p:image:w360

なるほど画面がiPhone8よりも縦に長いので、これまでのiPhoneにあわせて作ったアプリは画面下に余白ができてしまいます。この手のアプリiPhone5sとiPhone8とiPhone Xでレイアウトのバランスに苦しみそうです。よーやくiPhone4をサポートしなくてホッとしてたのに。(^^;

でも、縦スクロールを使ってたくさんの項目をエントリするアプリは項目が見渡せるようになっているハズ。

AppStoreで絶賛公開中だけど、たぶん私しかユーザーがいない俺アプリ「潜水日記」でためしてみましたw

f:id:dentakurou:20171019194756p:image:w360

これがiPhone8 plusだとこんな感じでした。

f:id:dentakurou:20171019195132p:image:w360

iPhone Xは、本体はplusよりも小さいのにplusよりも2行半ほど多く表示されていることがわかります。まぁplusって画面がiPhone8と等倍で大きいだけですからね。

ほぉーっと思ったのが、潜水日記の緯度経度のURLを長押し?すると、URLが浮き上がり、次にアプリの上にやや小さい地図が現れました。私のiPhone6だとSafariに飛んでグーグルマップを表示します。こんな実装していませんが。。。

さらに少し上に持ち上げると下からメニューがでてきました。

f:id:dentakurou:20171019194741p:image:w360

このケースだと地図もそこそこ見えて、メニューも選べていい感じです。いちいちブラウザグーグルマップに飛んだり、マップアプリに飛ばずにアプリに完結している感じです。

これってもしかして、iPhone6s以降の3D Touch搭載機種は前からできるのかな。。。でもiPhone Xでは画面が縦長になってこれは良い!と思いました。