20200323のiOSに関する記事は4件です。

flutterアプリを実機でビルドする時にハマったこと

なんかビルドエラーがやたらめったらでる

環境を移動させてから、ライトニングtoタイプCケーブルが届くまで実機テストができなかったのですが、届いたので、試してみたのですが、どうもうまくいかないのですね。

$ flutter run -d DEVICE_ID
            .
            .
            .
Could not build the precompiled application for the device.

Error launching application on sticky-fingers.

下記の方法でも解決できず

$ flutter clean
$ pod install

解決策

一旦cocoapodsを削除してから、再インストールすると、ビルドができました。

$ pod deintegrate

$ pod install
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【XCode:エラーの読み方】exceptionPreprocess ってなんだろうって調べたら

はじめに

iOS のシミュレーター上でどうやらこのようなException が吐き出されたらしい。
となった時

動作確認環境

iOS12シミュレーター
Xcode11.3

これりゃなんだろう??

Log
Failed to set (kerning) user defined inspected property on (UILabel): [<UILabel 0x############> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key kerning.

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndexedSubscript:]: index # beyond bounds for empty array'
*** First throw call stack:
(
    0   CoreFoundation                      0x################ __exceptionPreprocess + $$$

あぁエラーだ〜〜

諦めようとなる前に、一度、検索してみましょう

いくつか検索ワードがありました。

これはなんだろう?

検索
 exceptionPreprocess

CoreFoundation で、ExceptionPreprocess が起こってるみたいだな。って考えてみる。

Preprocess の Exception ということなのでしょうね。

ここで一度落ち着く。

って調べてみる。

ざっくり調べてみると、、、

iOS9でアプリが起動直後にクラッシュする場合の回避方法

https://qiita.com/peromasamune/items/716de6da66dd31faeba8

にも出てるみたいですね。

これは、Exception は一緒だけどもその上のエラーメッセージが違うぞっていうのがわかる。
どうやら、XCode 側の処理でダメなことしてるっぽいって考えておく。

検索
this class is not key value coding-compliant for the key kerning.
swift初心者:「this class is not key value coding-compliant for the key」の対処方法

https://qiita.com/Atsushi_/items/f7930dd00a2c2ea464cd

どうやら

削除を試みた際に用意していたControllerのみ @IBOutlet や @IBAction 接続を削除してしまうと発生するらしいエラーとのことでした。必ずcontrollerのみでなく、Storyboardの Show the Connections inspecter上からも接続を解除するようにしましょう。

とのころだからどうやら表題のエラーとは別のものらしい。

とわかる。

じゃぁ答えはどこにあるんだろう?ということで、

errorLog
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndexedSubscript:]: index # beyond bounds for empty array'

これが、問題のエラーが起きているところだった。

NSRangeException

Range の Exception が吐き出されているらしい。

どうやら「reason:」理由は、・・・に素直に書いている。ということで、NSArrayM のところに「#」の値はempty array らしいというのがどうやらそう読めるっぽい。

可能性があるのは、これは経験則からすると、型がNSArrayで呼び出していて、NSMutableArray 出ない時によく出るっぽいので、この辺りを読み進めていくと

エラー文を読み進める

errorLog
    1   某file.dylib                     0x################ objc_exception_throw + ##
    2   CoreFoundation                   0x################ _CFThrowFormattedException + ###
    3   CoreFoundation                   0x################ -[__NSArrayM objectAtIndexedSubscript:] + ###
    4   プロジェクト名                       0x################ $%%%%%%%某ViewController某collection某cellForItemAt某UICollection某Cell某Foundation某IndexPath某 + #####
    5   プロジェクト名                       0x################ $%%%%%%%某ViewController某collection某cellForItemAt某UICollection某Cell某Foundation某IndexPath某 + ###
    6   UIKitCore                        0x################ -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:notify:] + ###
    7   UIKitCore                        0x################ -[UICollectionView _prefetchItemsForPrefetchingContext:maxItemsToPrefetch:] + ###
    8   UIKitCore                        0x################ -[UICollectionView layoutSubviews] + ###
    9   UIKitCore                        0x################ -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + ######
    10  QuartzCore                       0x################ -[CALayer layoutSublayers] + ###
    11  QuartzCore                       0x################ 某Layer16layout_if_neededEPNS_11TransactionE + ###
    12  QuartzCore                       0x################ 某Layer28layout_and_display_if_neededEPNS_11TransactionE + ##
    13  QuartzCore                       0x################ 某Context18commit_transactionEPNS_11TransactionEd + ###
    14  QuartzCore                       0x################ 某Transaction6commitEv + ###
    15  QuartzCore                       0x################ 某Display11DisplayLink14dispatch_itemsEyyy + ###
    16  QuartzCore                       0x################ 某display_timer_callbackP12__CFMachPortPvlS1_ + ###
    17  CoreFoundation                   0x################ __CFMachPortPerform + 157
    18  CoreFoundation                   0x################ __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + ##
    19  CoreFoundation                   0x################ __CFRunLoopDoSource1 + ###
    20  CoreFoundation                   0x################ __CFRunLoopRun + ####
    21  CoreFoundation                   0x################ CFRunLoopRunSpecific + ###
    22  Foundation                       0x################ -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + ###
    23  プロジェクト名                       0x################ $某クラス名某メソッド名や型など + ####
    24  プロジェクト名                       0x################ $某クラス名某メソッド名や型など + ####
    25  プロジェクト名                       0x################ $某クラス名某table某didSelectRowAty某_Foundation某IndexPath某 + ####
    26  プロジェクト名                       0x################ $某クラス名某table某didSelectRowAt某UITable某Foundation某IndexPath某 + ###
    27  UIKitCore                        0x################ -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:isCellMultiSelect:] + ###
    28  UIKitCore                        0x################ -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + ##
    29  UIKitCore                        0x################ -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + ###
    30  UIKitCore                        0x################ _runAfterCACommitDeferredBlocks + ###
    31  UIKitCore                        0x################ _cleanUpAfterCAFlushAndRunDeferredBlocks + ###
    32  UIKitCore                        0x################ _afterCACommitHandler + ##
    33  CoreFoundation                   0x################ __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + ##
    34  CoreFoundation                   0x################ __CFRunLoopDoObservers + ###
    35  CoreFoundation                   0x################ __CFRunLoopRun + ####
    36  CoreFoundation                   0x################ CFRunLoopRunSpecific + ###
    37  GraphicsServices                 0x################ GSEventRunModal + ##
    38  UIKitCore                        0x################ UIApplicationMain + ####
    39  プロジェクト名                       0x################ main + ##
    40  libdyld.dylib                    0x################ start + #

読み進めていると、プロジェクト名の値メソッド呼び出しているところで値を取り出しているところにnilが入ってるのかなというところがわかりました。

具体的には自分の書き方にエラーがあるとみて自分のプロジェクト名の部分を探す

Log
    23  プロジェクト名                       0x################ $某クラス名某メソッド名や型など + ####
    24  プロジェクト名                       0x################ $某クラス名某メソッド名や型など + ####
    25  プロジェクト名                       0x################ $某クラス名某table某didSelectRowAty某_Foundation某IndexPath某 + ####
    26  プロジェクト名                       0x################ $某クラス名某table某didSelectRowAt某UITable某Foundation某IndexPath某 + ###

これはまた具体的なことだ!

エラー文からどこの部分でエラーになっているのか読み取る

クラス名とメソッド名と引数までもが実は連なっていることがわかりました!!!

Error メッセージは何気に具体的に教えていたりします。

この部分はどうやら、行番号だったりしますしね?

まとめ

XCode でのエラーが出た際は、このようにして、Error を読み進めると解決しやすいかもですよ。

またエラーが飛び出したらどういうエラーなのかをシェアしていきます。

ではまた!!!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Flutter iOSでGenerated.xcconfigが読み込めない場合の解決策

FlutterでiOS用にFlavorを追加した際に、Schemaは正常に追加できるものの、自作のxcconfigからGenerated.xcconfigをimportしようとしたところ、xcodeでrunした際に、Generated.xcconfigが見つからない旨のエラーが出ていました。
このままでは開発環境情報をハードコーディングする羽目になってしまう、と困っていたところ、英語で解決策が乗っているサイトを見つけました。
https://www.reddit.com/r/Flutter/comments/d1otpq/different_build_configurations_in_iosxcode_wont/

「コピーは絶対するな。新しいxcconfigファイルが置かれているフォルダを確認しろ。」
ということでxcconfigが置かれているフォルダを確認したところ、一つ階層がずれていることに気づきました。
最初Flutterのバグかと思っていましたが、ただのケアレスミスでした。
これで、今の所iOSでもFlavorは十分使えるようになりました。
今後気を付けたいと思います。

Don't do that, don't copy and paste the Generated.xcconfig file because you lose important build settings like FLUTTER_BUILD_NUMBER and FLUTTER_BUILD_NAME. You'll want those.

Check to make sure your new scheme xcconfig file is in the right folder. It should be on disk in the Flutter folder. After several hours of banging my head, I noticed that my Production.xcconfig file it was NOT in the /Flutter directory, but a directory above. That's not right, and was causing the error.

I think when you right click and add a xcconfig file in XCode, it doesn't put it in the correctly directory.

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[IPhone]で使えるGitHubアプリを比較してみた

スマホでGithubを使いたい

 対象読者

  • githubを使い始めた方
  • IOSブラウザで使うGithubに不満を感じている方

はじめに

最近Githubを使い始めたものです。ウェブ上でバージョン管理できるのは非常に便利ですね。最近では、コードだけではなく簡単なメモ等もマークダウンで書いて使ったりしています。そこで出先や隙間時間にさっき書いたメモを見たいなと感じたときに携帯のウェブページにアクセスするのですがスマホでみるには適していないように感じます。そこで、App StoreでGithubアプリを探したところいくつか見つかったので今回はそれらの特徴を簡単にまとめました。

Github公式アプリ

まずは公式アプリからダウンロードしました。
アプリを起動した感じでは、Iphoneの設定画面に似ている感じがあります。ウェブページから閲覧するのに比べRてアイコン等が大きく操作性は非常によいと感じました。
また、ダークモードに対応しているので夜間に目の負担を軽減することができます。
しかし、ウェブページと比較するとコードの編集等はできないようです。また、マークダウンで記述したファイルがマークダウンとして表示されないのが残念なところです。(README.mdは例外的にマークダウンとして表示されますが)
2FB1EC69-61C1-44F9-BB50-A517EC449915.png   4F9646DB-B2EF-40CD-9B6F-72B020A49FBA.png

CodeHub

次はCodeHubをダウンロードしました。
サインインしてみると、まずニュースのページが開きました。設定からアプリ起動時に表示するページを指定できるようです。これは便利ですね。
また、このアプリではマークダウンの表示もできます。しかし、難点としてコード表示時の画面移動がスクロールではなくダブルタップである点です。
989AC310-D260-4B99-80F4-553BE5F7A3AD.png  A39A2988-5C4C-488D-9472-066334BC317E.png
マークダウンは表示はできます。こちらもコードの編集はできないようです。

GitHawk

次は、[GitHawk](https://apps.apple.com/jp/app/githawk-for-github/id1252320249 "GitHawk)です。こちらは通常のアプリとは異なり、自分のリポジトリを見るというよりはリポジトリのサーチに向いているように感じました。
検索したリポジトリも保存され、通知も受け取ることができるのが特徴です。
ブックマークも可能。
E520E53D-C976-4BA2-8104-416730CD2B86.png  F712C7FE-1304-4841-8AD7-F7825DEAB1D4.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む