iOS swiftでQRコード認識時に時々クラッシュする際対策!

iphone swiftでQRコード認識時にクラッシュする事がある。その対策

QRコードリーダーアプリで、下記のようにカメラ内のQRコードを読み取る時に、
クラッシュする事が一定確率であった。

エラー内容


fatal error: unexpectedly found nil while unwrapping an Optional value

クラッシュ対象のコード


qrCodeObject = previewLayer.transformedMetadataObjectForMetadataObject( metadata as! AVMetadataMachineReadableCodeObject) as! AVMetadataMachineReadableCodeObject

この部分で、クラッシュする事がある。。

色々調べたら、AVCaptureVideoPreviewLayer内のメソッドでnilが入る事があるらしい。

超参考:http://ja.stackoverflow.com/questions/14968/%E4%B8%8B%E8%A8%98%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E5%8F%82%E8%80%83%E3%81%AB%EF%BC%92%E6%AC%A1%E5%85%83%E3%83%90%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E3%82%92swift2%E3%81%A7%E6%9B%B8%E3%81%84%E3%81%9F%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8C-%E5%AE%9F%E6%A9%9F%E3%83%87%E3%83%90%E3%83%83%E3%82%AF%E6%99%82%E3%81%AB%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E7%94%BB%E9%9D%A2%E3%81%AE-fatal-error-unexpectedly

ボクが対策したコード


if previewLayer.transformedMetadataObjectForMetadataObject( metadata as! AVMetadataMachineReadableCodeObject) != nil { //nilチェックしてから処理 qrCodeObject = previewLayer.transformedMetadataObjectForMetadataObject( metadata as! AVMetadataMachineReadableCodeObject) as! AVMetadataMachineReadableCodeObject }else { // キャプチャセッション再始動 captureSession.startRunning() }

nilチェックをおこなってら処理する事で解決しました。
また、ただのnilの場合はカメラが動かなくなってしまうので、
キャプチャーセッション等を、再度走らせる事で思い通りの動作になりました。!
参考になれば幸いです!!

iOS 画面を(portrait)縦固定にしても、window が横画面サイズになる。

xcode8 general

全部縦固定していたはずなのに、なぜかipadだけランドスケープ(横画面)で起動する。。
ちょっとおかしいと思って色々調べたメモ


環境

  • xcode8
  • Mac OS El Capitan

症状

  • xcodeの設定で General で
    Devices : Universal で、
    Device Orientation: Portrait のみの設定
  • iPadで横画面状態で、アプリを起動

するとUIWindowでサイズを取得すると縦画面のサイズと違うサイズが取得される、
むしろ、縦より横のサイズが大きい!
横画面のサイズになっているっぽい。。

DevicesをiPhoneにし、Portrait のみでも結果同じだった。

画面サイズを取得して、UIViewとか、UIを作っているところが、
予想外の動きにになりまくり。。


対策

設定画面のGeneralの

  • Devices: Universalに。
  • info.plistファイルにて記述されている UISupportedInterfaceOrientations~ipad
    の中を UIInterfaceOrientationPortrait のみにする。

設定画面のDevicesでプルダウン切り替えでipadの内容が保持されているのはあとから知ったw

info.plist

〜
<key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
    </array>
</dict>
</plist>
〜
  • General設定画面の Required full screen にチェックを入れる
xcode8 general
xcode8 general

ただ、iPadでは、マルチタスキング機能というものがあって(Slide OverやSplitView)が使えなくなってしまうようなのでご注意を。

参考記事さま http://qiita.com/jollyjoester/items/c8bb1592d01fdef663f9

xcode8 swift2.3でRealmSwiftを使う際にpod installで下記エラーがでた

最近xcodeをxcode8にして、色々かわりすぎて戸惑いを隠せない、
小心者筆者です。。

いままでxcode7.3かな?で動かしていたRealm Swiftが使えなくなったのでメモ。
前提として、xcode8でswift2.3を使った場合です。

Podfileで下記のようにrealmをインストールしていたのですが


pod 'RealmSwift'

pod install するとっこのようなエラー


$ pod install /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin15/rbconfig.rb:213: warning: Insecure world writable dir /Applications/Cocos/tools/ant/bin in PATH, mode 040777 Analyzing dependencies Pre-downloading: `RealmSwift` from `https://github.com/realm/realm-cocoa.git`, branch `master`, submodules `true` [!] Unable to satisfy the following requirements: - `Realm (= 2.0.2)` required by `RealmSwift (2.0.2)` None of your spec sources contain a spec satisfying the dependency: `Realm (= 2.0.2)`. You have either: * out-of-date source repos which you can update with `pod repo update`. * mistyped the name or version. * not added the source repo that hosts the Podspec to your Podfile. Note: as of CocoaPods 1.0, `pod repo update` does not happen on `pod install` by default.

で、下記で解決


pod 'Realm', :git => 'https://github.com/realm/realm-cocoa.git', :branch => 'master', :submodules => true pod 'RealmSwift', :git => 'https://github.com/realm/realm-cocoa.git', :branch => 'master', :submodules => true

はいそれだけ。っす