Edited at

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

アプリを開発してた時 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