ios6でのモーダルビュー表示

モーダルビューの表示がiOS6から変わっていたのでメモ。

  iOS5以前

  iOS6

モーダルビューが呼ばれたときに、裏にあるビューは一度削除されて。戻るときは、またViewWillAppearが再度呼ばれます。

UITextViewとUIToolbar

UITextViewを使うとUITextFieldと違って完了ボタンが改行ボタンになっている。完了ボタンに変更もできるけど、改行もしたいからUIToolbarを使用して、そこに完了ボタンを配置してみる。

キーボートが日本語とかになっていると、予測変換?のバーが出てきてせっかく作ったツールバーが隠れてしまう。。
ツールバーをキーボードのサイズで動的に変更することで解決しました。
方法は、ここに書かれているTextfiledを動的に変更する方法をツールバーに適応させればOK!!

UITextViewだと自分でいろいろカスタマイズ出来るけど、優しさが必要だな。

UITextViewあれこれ

UITextViewの実装でいろいろ試してみたのでのでメモ

  キーボード表示

遷移時にbecomeFirstResponder/textViewShouldEndEditing を使用すればキーボード編集開始/終了でデリゲートが呼ばれるはずなのに呼ばれない。。。
いろいろ試してみたら、addSubviewした後にbecomeFirstResponderすることでキーボードが表示された。
こんな感じ。

続いてデリゲートメソッドはこんな感じ。戻り値をNOにすると呼ばれなくなるので注意。

 

  テキストエリアを枠線&角丸にする

デフォルトのテキストエリアだとかなり悲しい感じなので枠線を付けて角丸にしてみます。

layerを使用するために、QuartzCore.h のimportを忘れずに。
UITextViewってなんか扱いにくいなぁ。

objective-Cでの型変換

あんまり用途がないかなって思っていたけど、使う機会が何回かあったのでいくつかメモしておきます。

  NSString* から char*への変換

  char* から NSString*への変換

  NSString から int への変換

※floatやdoubleに関しても同様にできるよ。

  int から NSString* への変換

メモ(鍵とか証明書とか)

iOSでのPush通知(Provider側)を実装するのにいろいろ証明書やら鍵を作成するので
その時に調べた内容をメモしておきます。

まずは鍵と証明書の種類について
 .key : 秘密鍵(Private Key)
 .csr : 証明書発行要求(CSR : Certificate Signing Request)
 .crt : 証明書(CRT : Certificate)
 .crl : 証明書失効リスト(CRL : Certification Revocation List)

これらには、DER(Distinguished Encoding Rules)形式 と PEM(Privacy Enhanced Mail)形式がある。PEM形式は、DER形式(バイナリ)をBASE64で可視化したもの。
これを踏まえてProviderにインストールするSSL証明書と鍵を作成する。
apns-dev-cert.p12 : 証明書から作成したもの
apns-dev-key.p12 : 秘密鍵から作成したもの

① PKCS #12 ファイルapns-dev-cert.p12 から SSLサーバ証明書(EV SSL証明書)を取り出し、apns-dev-cert.pemに保存

$ openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12

② PKCS #12 ファイルapns-dev-key.p12 から秘密鍵を取り出し、暗号化せずにapns-dev-key.pem に保存

$ openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12

③ Apache で ssl を使用する場合、起動時に秘密鍵のパスワードを聞いてくるので,途中でとまってしまいます。
server.key を復号化して、パスワードを入力しなくても秘密鍵を使用できるようする。

$ openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem

④ apns-dev-cert.pem と apns-dev-key-noenc.pemを連結してapns-dev.pemに吐き出す

$ cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem

apns-dev-key-noenc.pem, apns-dev.pem をサーバの適切な場所へ放りこんでおく。

Push通知は実装以上にこの辺が面倒だな。

Xcodeでデバッグマクロ

iOS開発時にデバッグログを

とか

って書いていたけど、フォーマット指定子を忘れたり、リリース前に消したりするのが面倒だったので、
関数名(引数も)/行数/文字列を出力するデバッグマクロを書いてみたよ。
(さらに…)

iProcessingでiPhoneアプリ作成

面白そうなのがあったので試してみまた。iProcessing。
いままでこつこつやっていたProcessingの資産をiPhoneアプリに出来るか試してみました〜。

環境
macOSX 10.5 leopard
Xcode 3.1

① iProcessingをダウンロード
 以下のページからiProcessingをここからダウンロード
 iOS3とiOS4があるけど今回はiOS3を使用。

② サンプルを動かしてみる
 ダウンロードしたフォルダ「0004」配下の「examples」の中に様々なサンプルを起動すると、
 iPhoneシミュレータが起動して、アプリの実行結果をシミュレートできる。

③ いままでの資産を動かしてみる。
 サンプルを丸ごとコピーする。
 [プロジェクトのアイコン] →「Resorces」→「main」→「main.pde」
 「main.pde」ファイルを選択して、Processingのコードを丸っとコピー。
 あとは、ビルドすればシュミレーター上で動きます。
 
 このプロジェクトの作り方ってoFの007と同じだけど、なんだか慣れないなぁ。

ちなみにOSX 10.6 SnowLeopardだとアクティブSDKを「iPhoneシミュレータ3.2」にしてiPadでの起動の様子できるみたい。
詳細はここを参照してください。

ARC forbids explicit message send of ‘autorelease’

また出くわしたので備忘録として記載しておきます。

iOS5になってからARCを使用していない既存のライブラリをインポートしてコンパイルすると
以下のエラーが大量にでてくる。

ARC forbids explicit message send of ‘autorelease’
‘release’ is unavailable: not available in automatic reference counting mode

【原因】
iOS5からはARCがメモリ管理を適切に行ってくれるらしいのでreleaseやautoreleaseが必要なくなったみたい。
必要ないのに記述してるから、いらないよ!ってエラーらしい。

【対処法】
① Xcodeでプロジェクトファイルを選択
② 「Build setting」の「Apple LLVM Compiler 3.0 – Language」の中に
「Objecctive-C Automatic Refarence Counting」があるので、それを「YES」から「NO」に変更

「This game is not recognized by Game Center.」って・・・

Game Centerに対応しようとしたらアホみたいなところでハマったのでメモして。

sandboxアカウントをいったんログアウト後に、再度sandboxアカウントでログインしようとしたら以下のメッセージが・・・。
「This game is not recognized by Game Center.」
なぜに。ってことでいろいろ調べると次のチェック項目が。

・Bundle IDとBundle Identiferが一致しているか
・プロビジョニングファイルは正しいか
・iTunes ConnectでGame CenterをEnableにしているか
・サンドボックス用のアカウントを使用しているか

全部チェックしたが問題なし。。。
こんな時はXcodeを再起動して入れ直しだ!!ってことで再起動してアプリを入れ直したが解決せず。

泣きそうになりながらアプリを削除して、入れ直したらログインできました!!