R.swiftとWARNで競合したので解消した
WARNの説明
Obj-C時代は、#warning
を書いて意図的に警告を表示し、後から対応する等のメモがわりに使用していた。(他にそういう人は多いはず)
で、これがSwiftになると使えないので、// WARN:
を書いたら同じように警告を表示するようにRun Scriptを入れるわけです。
R.swiftとWARNの競合
便利なR.swiftを利用している人もそれなりにいると思う。
そこで、先ほどの// WARN:
のRun Scriptを入れてやったら、自分の環境で競合してerrorがでた。
競合の理由としては、R.swiftが生成するSwiftファイル格納用に作成したフォルダ名R.swift
が、WARN
の警告検索対象である*.swift
にひっかかったため。
下記のように除外項目-not -name "R.swift"
を入れてやり解消してやった。
KEYWORDS="WARN:" find ${SRCROOT} \( -name "*.h" -or -name "*.m" -or -name "*.swift" -not -name "R.swift" \) -print0 | \ xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | \ perl -p -e "s/($KEYWORDS)/ warning: \$1/"
iPadのiPhone Appの互換表示モードについて
iOS9が切れたら3.5inchも切れると勘違いしてる人が多い
iOS9系が切れれば、iPhone 4sが最後だから3.5inch端末をサポートしなくてすむ!と喜んでいる輩は多いだろう。
だが、そうはApple(問屋)が卸さん!!
何故か、日本のAppleのレビューする人はiPadでiPhoneアプリをチェックすることがしばしば見かける(体感的に)
で、画面崩れていようものならRejectくらうわけですよ。
iPadの互換表示は一律同じではない
ちなみにiPadは、全機種が3.5inchでiPhoneアプリを互換表示するわけではない。
以下が、iPadと互換表示のサイズ
機種 | 互換サイズ |
---|---|
iPad 2 | 3.5inch |
iPad Air | 3.5inch |
iPad Air 2 | 3.5inch |
iPad Pro 9.7inch | 3.5inch |
iPad Pro 10.5inch | 3.5inch |
iPad Pro 12.9inch | 4.7inch |
UIButtonが青色一色のベタで表示された時の対処
初歩的ミス
IBOutletで紐づけていたUIButtonにコードでimageをセットしてあげるも、青色一色でベタ塗りされた表示になっていた。
理由としては、UIButtonのTypeがSystem
だったために画像をセットしても青色で表示されていた。
Custom
に変えて正常に表示されたので、解決。
URLComponentsは、`+`をPercent Encodingしてくれない
経緯
APIを叩く際にランダムに生成しな内容をBASE64化してQueryにつけて送信しようとしていたが、5割ぐらいのエラーになっていた。
調査した結果、+
がPercent Encodingされていないためだったが、なぜこんなことが起きたのか…。
便利なURLComponentsの罠
この記事でURLComponents
という便利なものがある!自前でPercent EncodingしてQuery作らなくていいんだ!とうっきうきで使っていたわけだが、+
はPercent Encodingしてくれない。(ちなみに+
をPercent Encodingすると%2B
になる)
なぜ起こったか
今回のようなことが何故起こったのか。
URLComponents
は、説明にRFC 3986
に準拠していると記載されている。サーバ側がRFC 3986
に準拠していない作りが理由とも言えるし、自分がそこを確認怠り、URLComponents
を使用したのが理由とも言える。
URLComponents - Foundation | Apple Developer Documentation
サーバの作り次第で、このあたりはいくらでも変わるので、気をつけたいところ。
今回は、時間やコードの手戻りが厳しいこともありURLComponents
でQueryを付けた後、+
を%2B
に置換する力技で解決した。
URLComponents
に頼らない自作URLComponentsのようなものを作ってもいいかもしれないと思った。