Tag Archives: iOS SDK

iOS 9のUIWebViewがとても残念で困る

0
Filed under iOS SDK, トラブルシューティング
Tagged as ,

気になる挙動(バグ?)があちこちにあるiOS 9のUIWebViewについて、twitter等で見つけた情報をまとめていきます。(なにか分かれば追記していきます)

まとめ

分かりやすいように、最初に箇条書きをまとめておきます。

  1. iOS 9のUIWebViewでは基本的に、強制HTTPS通信!
  2. iOS 9のUIWebViewではHTTP通信したい場合はATSまわりを設定する
  3. CSSのチルダ(~)セレクタが使えなくなった
  4. UIWebViewのwindow.locationがページ遷移に併せて変わらなくなった
  5. htmlのmetaタグのviewportのcontentには”devie-width”を入れるといいらしい

(2015/09/22 更新)

ATS(App Transport Security)関係

『iOS 9のUIWebViewでは、HTTPS通信が基本となる』というのが、Apple Transport Security、通称「ATS」というものです。
事前に開発者には通告されていたし、下記のようなまとまった情報もあるので、必見です。
■[iOS 9] iOS 9 で追加された App Transport Security の概要 | Developers.IO

ということですが、
「まぁ、全部OKにするオプションがある」ということを知っていたので、それで当面はいいだろう、と思っていました。
が、実際にiOS9で使ってみると、なんかおかしい!という感じが出てきたので、調べてみた、というのが今回のブログエントリです。
主に、twitterで情報収集してみました。

UIWebView関係


そうなんです!
実際に使ってみて驚いたのがこれ。。


私も、例外とかクラッシュじゃなく変な止まり方に遭遇しています。。
そう、jsからUIWebView経由でネイティブのUIが動くときが、何か怪しいのです!


Ionicは、Cordova+Angularのフレームワークらしいです(知りませんでした)が、Angular関係でも何か問題あるようですね。


あ、これか!
【iOS 9のUIWebView】では、【CSSのチルダ(~)セレクタ】が使えなくなった、ということらしいですね!!!

↓こちらの記事がまとまっているようです。
■Preparing for iOS 9 | The Official Ionic Blog
前述したIonicの開発者ブログですが、これを読むとさらに闇は深いことが判明!

同ブログの別エントリで詳しく書かれていますが、なんと、UIWebViewのwindow.locationがページ遷移に併せて変わらなくなった、という問題もあるようです!
■iOS 9 Potential Breaking Change | The Official Ionic Blog

その他の問題

AppleのDeveloper Forumからメモ。
HTMLのレイアウトの問題らしい。
■UIWebView layout in iOS 9 | Apple Developer Forums

<meta name="viewport" content="initial-scale = 1.0”>
↑じゃなくて、↓をのように、device-widthをいれるといいよ。
<meta name="viewport" content="width = device-width, initial-scale = 1.0”>

これは軽微な感じですね。

というわけで、

拙訳:『UIWebViewは壊れてるし、WKWebViewは制限ばっかだし、WebViewControler(訳者注:SFSafariViewControllerのこと?)はラッパー作りたい人には向かないし、つんだ。』

同感。

いや、そんなこと言ってないでやっぱり、WKWebViewに置き換える作業しなきゃ、ですよ>自分


iOSアプリ開発:deprecated対応メモ:NSString

0
Filed under iOS SDK, トラブルシューティング
Tagged as ,

使い勝手がよいオープンソースライブラリでもメンテナンスがされていないと、使われているメソッドが新しいiOS SDKでdeprecated(非推奨)になってしまい、警告が出ることがあります。
昨今は開発している人も多いのでググるとすぐに見つかるのですが、引数が増えていたりして対応がわかりにくいことがあります。
自分でぱっと見で分かりやすいように、メモを残していきたいと思います。

【NSString】 – sizeWithFont:

Warning: ‘sizeWithFont:’ is deprecated: first deprecated in iOS 7.0 – Use -sizeWithAttributes:

・公式リファレンス → sizeWithAttributes: – NSString UIKit Additions Reference

// 素材.
NSString* str = @"hogehoge";
UIFont* myFont = [UIFont systemFontOfSize:14];
 
// OLD.
CGSize size = [str sizeWithFont:myFont];
 
// NEW.
NSDictionary* dicFontAttr = @{ NSFontAttributeName:myFont };
CGSize size = [str sizeWithAttributes:dicFontAttr];

【NSString】 – drawAtPoint:withFont:

Warning: ‘drawAtPoint:withFont:’ is deprecated: first deprecated in iOS 7.0 – Use -drawAtPoint:withAttributes:

・公式リファレンス → drawAtPoint:withAttributes: – NSString UIKit Additions Reference

// 素材.
NSString* str = @"hogehoge";
UIFont* myFont = [UIFont systemFontOfSize:14];
 
// OLD.
[str drawAtPoint:p withFont:myFont];
 
// NEW.
NSDictionary* dicFontAttr = @{
  NSFontAttributeName:myFont,
  NSForegroundColorAttributeName:textColor }; // テキストの色はここで指定.
[str drawAtPoint:p withAttributes:dicFontAttr];

【NSString】 – drawInRect:withFont:lineBreakMode:alignment:

Warning: ‘drawInRect:withFont:lineBreakMode:alignment:’ is deprecated: first deprecated in iOS 7.0 – Use -drawInRect:withAttributes:

// 素材.
NSString* str = @"hogehoge";
UIFont* myFont = [UIFont systemFontOfSize:14];
CGRect rectArea = CGRectMake(0, 0, 320, 50);
 
// OLD.
[str drawInRect:rectArea
       withFont:myFont
  lineBreakMode:NSLineBreakByWordWrapping
      alignment:NSTextAlignmentCenter];
 
// NEW.
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.lineBreakMode = NSLineBreakByWordWrapping;
style.alignment = NSTextAlignmentCenter;
NSDictionary *attributes = @{
  NSForegroundColorAttributeName:textColor,
  NSFontAttributeName:myFont,
  NSParagraphStyleAttributeName:style
};
[str drawInRect:rectArea withAttributes:attributes];

[AD]↓評判がいいので私も買いました!

アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。

[AD]↓kindle版を買って読んでいます!

iOSアプリ開発中にデバイスをスリープさせない

0
Filed under Xcode
Tagged as , ,

アプリ開発中には、「コードを書く、実機動作確認」という作業の繰り返しです。
でも、コードを書いている間にデバイスがスリープすると、イラッとしてしまいます。。
かと言って、使用しているデバイスが普段使いのデバイスだと、スリープさせない設定にするのもためらわれてしまう。。
これまではいちいちアンロックしていたのですが、ちょっと立ち止まって、どうしたものかと考えてみました。
本当はデバイス側に「USB接続しているときにはスリープしない」という設定があればよかったのですが、見つけられなかったのです(あるのかなー)。

で、思いついたのは「開発中のアプリにスリープさせないコードを実装してしまう」という方法!
シンプルだけど有効だと思って、早速自分のアプリに組み込みました。

SwiftでDEBUGフラグを設定

Swiftを使ったプロジェクトではデバッグビルド時のDEBUGフラグは標準で未設定のようで、自分で設定する必要があるようです。
XcodeでTARGET設定の中にある「Other Swift Flags」に「-D DEBUG」と設定しておきます。
Xcode TARGET設定, "Other Swift Flags", "-D DEBUG"

SwiftでDEBUGフラグを判定

あとは、プログラムの実装側で、下記のようにコンパイル時のフラグ分岐でスリープと解除のソースを書いておくと大丈夫でした。

func applicationDidBecomeActive(application: UIApplication) {
	#if DEBUG
		println("avoid sleep for debug")
		application.idleTimerDisabled	= true;
	#endif
}
 
func applicationDidEnterBackground(application: UIApplication) {
	#if DEBUG
		println("avoid sleep for debug - exit")
		application.idleTimerDisabled	= false;
	#endif
}

AD

アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。



アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。

Xcode:とある fatal errorへの対応方法

0
Filed under Xcode, トラブルシューティング
Tagged as ,

さっきまでうまくビルドできていたのになぜかビルドできなくなった!修正したコードを戻してもビルドが失敗する!ということがままあります。
そういう状態のあるパターンの解決方法をメモしておきます。

fatal error – file X has been modified

今回紹介するのは、こんな感じのエラーのとき。
Xcode:とある fatal errorへの対応方法

fatal error: file ‘/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIView.h’ has been modified since the precompiled header ‘/Users/XXXX/Library/Developer/Xcode/DerivedData/TestApp-hogehogefugafugafoobar/Build/Intermediates/PrecompiledHeaders/TestApp-Prefix-hogehogefugafuga/TestApp-Prefix.pch.pch’ was built

ちょっとiOS SDKとかのライブラリヘッダを見ていたりしている時に、ひょんな拍子で上書き保存してしまったりしてしまい、ファイルのタイムスタンプを変更してしまった時になる症状です。
プリコンパイル済みのライブラリのバイナリよりヘッダーが新しいからおかしいよ!というエラーですね。
この場合、プリコンパイル済みのバイナリを削除することで解決します。
具体的な方法ですが、「下記のフォルダを削除し、再ビルド」です。

/Users/XXXX/Library/Developer/Xcode/DerivedData/ModuleCache

XXXXとしているところは自分のユーザー名だったりしますし、将来、場所は変わるかもしれませんが、前述のエラーの中にあるパスを頼りに探すとよいでしょう。

iOS8開発テクニック集 Xcode6編

iOS8開発テクニック集 Xcode6編

カテゴリ:Kindle版

発売日:2014-04-12



アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。