11
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS開発時 見逃しちゃった 細かいバグ集

Last updated at Posted at 2018-10-17

アプリを開発してた時 or 他の人が開発しているアプリを見た時に、ぼけっとしていると見逃してしまいそうなiOS開発特有の細かいバグをピックアップしました。
今後の教訓として、活用していこうと思います。

UITextField/UITextView

入力制限を実装した時

TextFieldの入力制限をdelegateで行った時に、外部キーボードから入力制限をした文字列が入力できてしまい、バグになった。
さらに、入力制限を行った->バリデーションが要らないということで、バリデーション処理を行っていなかったので、被害が拡大した。

ViewController以下のような外部キーボード無効化処理を入れると防げた。
そもそも、TextFieldの入力制限を完全に行うのは手間がかかるので、バリデーションをしっかりやったほうがいいと反省しました。

// BackKeyを無効化
- (NSArray *)keyCommands {
    return @[[UIKeyCommand keyCommandWithInput:@"\b" modifierFlags:0 action:@selector(description)]];
}

GPS(CoreLocation)

バッテリー周り

不用意にGPSを最高精度にしたため、バッテリーの減る速度が早くなった。

CLLocationManager *locationManager = [CLLocationManager new];
locationManager.desiredAccuracy = kCLLocationAccuracyBest; //不必要に精度を高くしない

WebView

ネットワーク エラー表示

Webページの読み込み失敗時にアラートを表示する仕様があるときに、
ページが表示しきる前に、次のページに遷移すると読み込み失敗時にアラートが表示されるバグが発生した。

次のページに遷移する時に、現在表示中のページ読み込みが読み込み失敗(=キャンセル)扱いになるので、エラーコードにNSURLErrorCancelledが指定されていた時は、無視するように実装すると、不必要なエラーアラートが表示されなくなった。

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    if ([error code] != NSURLErrorCancelled) {
        //エラー処理
    }
}

Photos.frameworkで画像取得/表示

iCloud上のみにある画像の拡大表示

PHImageを使用して、iCloudで管理されている画像を表示する時、

  • サムネイル : 端末内
  • オリジナル画像 : iCloudのみ

の条件を満たす画像が、大きいサイズを指定した時に表示されないバグが発生した。
テストの時は、

  • iCloudにしかないデータを使用してなかった
  • サムネイルは問題なく表示されていた

ため、バグに気づかなかった。

PHImageRequestOptionsを生成する時に、networkAccessAllowedをYESにすれば、PHImageが勝手にiCloudから取得してきてくれます。

PHImageRequestOptions *requestOptions = [PHImageRequestOptions new];
requestOptions.resizeMode   = PHImageRequestOptionsResizeModeExact;
requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic;
requestOptions.synchronous = NO;
requestOptions.networkAccessAllowed = YES;

[[PHImageManager defaultManager] requestImageForAsset:asset
                                           targetSize:PHImageManagerMaximumSize
                                          contentMode:PHImageContentModeDefault
                                              options:requestOptions
                                        resultHandler: ^(UIImage *image, NSDictionary *info){
    // 取得したimageを反映
}];

resizeMode・deliveryModeについては、以下のスライドがわかりやすかったです。
https://www.slideshare.net/kanamenoto/photos-vs-assets-library-photosframework

11
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?