2014年11月25日火曜日

【開発】GoogleAnalytics for iOSのversion 3.x系でハマった件

コンパイルすると下記のエラー

Undefined symbols for architecture armv7

ライブラリに「libz.dylib」が追加されてなかった。

以上!!

2014年10月13日月曜日

【開発】ios8, Xcode6からUIButtonの裏ワザが使えなくなってた。


下記サイトにもあるが、

http://d.hatena.ne.jp/KishikawaKatsumi/20100507/1273198706

今まで
[UIButton buttonWithType:110];
とすると隠しAPIでお洒落なボタン背景になる。

普通に審査も通過していた。
しかし突然ios8, xcode6から使えなくなっていた。
しかもリリース済みのアプリなどもいきなり画面が表示されない始末・・・><;

隠し機能なので文句は言えないがそりゃないよ・・・
この不具合に気づくのにかなりの時間を要したのが悔やまれる・・・

プログラマーで絵が書けない自分にはお洒落なボタンで助かっていたのだが。
これからはイラストレーターもさわれるようになろう!

早くアップデートせねば!

以上!!

2014年10月2日木曜日

【審査】Apple審査を超特急で

アップルにアプリ審査を出すときに特急で審査してもらう窓口があります。

とてもわかりづらいですが、iTunesConnectでアプリを選んだ一番下にさり気なく「連絡先」あります。


Contact Usの画面が表示されたら「App Review」と「Requiest Expedited Review」を選びます。
ここで「Done」ではなく「Requiest an Expedited App Review form」を選んでください。

※Expedited = 早急な

するとアプリの詳細や特急審査の理由などを入力するフォームが表示されます。
全て入力し終わったら「submit」を押して完了です。



10日かかる審査が2日で終わることができて大変助かりました。
お試しあれ!

以上!!

2014年10月1日水曜日

【再申請】iTunesConnectがUI新しくなっただけだなく

アプリに致命的なバグがみつかり、アプリを再申請しなくてならなくなりました。

iTunesConnectの先月から新しいUIになったばかりでなく、
下手な日本語に翻訳され、画像のアップロードも無駄な動きで使いづらい。

さらにわかりづらいのがアプリの再申請。

1.0.1が「レビュー待ち」状態だったのですが
これをリジェクトして再申請しようとしたですが
Xcodeでvalidate,submitをしたところRedundantエラー


Redundant = 冗長な

iTunesConnectのバージョンを1.0.2にあげて再度
Xcodeでvalidate,submitをしたところ解消されました。



バージョンあげるのも下の方にありとてもわかりずらかった。

かなり時間がたってビルドの箇所に1.0.2がリスト表示で現れました。
↑これがすぐ来ないからかなり悩んだ・・・

iTunesConnectのUIはiPhoneのUI、UX担当の人がアドバイスしたらいいのかと思いました。

以上!!

2014年9月15日月曜日

【開発】xibファイル消してもクリーンビルドしてもダメよ〜ダメダメ!

xibを消しても表示されることがあって悩まされてました。

そんな時は一旦アプリをホーム画面から長押しで削除して下さい。
「今まで何だったんだ!」って言うくらい素直に消えてなくなりました!

以上!!

2014年9月14日日曜日

【開発】「implicit retain of 'self' within blocks」を「YES」に


前にBlock内でselfを参照してメモリリークするという記事を書かせて頂きましたが
http://appdeleegate.blogspot.jp/2014/07/blockself.html

このリークを簡単に調べる方法がありましたので紹介します。

「Build Settings」の「Apple LLVM 5.1 warnings - Objective C and ARC」の「implicit retain of 'self' within blocks」を「YES」にするだけです。


通常の警告と同じように黄色いマークで教えてくれます。
私の環境でも無意識にリークさせている箇所が沢山ありました。

以上!!

【開発】iPhoneホーム画面のタイトルのローカライズ方法!

iPhoneのホーム画面のタイトルを変更するには「Custom iOS Target Properties」の「Buindle display name」を変更すれば出来ますが、



ローカライズするにはどうすれば良いのかわかりませんでした。

変更する場合は「infoPlist.strings」ファイルで各言語ファイルに下記変数名で名前を指定してあげましょう。



CFBundleDisplayName = "Pass Note";  //英語の場合
CFBundleDisplayName = "合格ノート";  //日本語の場合

以上!!

2014年9月13日土曜日

【開発】NSLocalizedStringを使ってiosアプリをローカライズする方法!

最近、涼しくなってきましたね!
就寝時に冷房を付けなくても大丈夫な感じです。

さて、みなさんアプリの国際対応をどのように行ってますか!?

NSLocalizedStringを使えばKVS的な感じで言語を自動で切り替えてくれます。

合格ノートでもそろそろ日本語だけじゃなく、英語、韓国語にも対応したいと思います。

NSLocalizedStringはios7から少しやり方が変わったみたいでネットの情報も古い記事があるようですので簡単に説明してみます。

1. 左上のプロジェクト名のところをタップ
2. 切り替わった画面のInfoタブを選択
3.Localizationsの「+」をタップして追加したい言語を選択

4.プロジェクトの文字列を記述している箇所をNSLocalizedStringに変更

例:
[Before]
UILabel * hogeLabel = [UILabel new]
hogeLabel.text = @"Home";
[After]
UILabel * hogeLabel = [UILabel new]
hogeLabel.text = NSLocalizedString(@"home"nil);;

※homeがkey, nilはコメントで省略してもよし。

5.ターミナルでプロジェクトファイルのディレクトリに移動して下記を実行
find . -name '*.m' | xargs genstrings

6.生成されたLocalizable.stringsを確認しValueを言語毎に編集する。

"home" = "Home"; //英語の場合
"home" = "ホーム"; //日本語の場合

以上!!

2014年9月2日火曜日

【開発】git origin url の変更方法!


レポジトリを引っ越したくなる時がある。
その場合、ローカルのリモートURLを変更してあげる必要がある。

自分が今回行ったケースは
個人で開発を行っているアプリでDropBoxで一人でpushを行っていて
/Users/Username/Dropbox/development/projectname.git
にレポジトリを新たに作る場合です。

git remote set-url origin /Users/Username/Dropbox/development/projectname.git

プロジェクトフォルダの隠しファイル「.git」があるディレクトリで行って下さい。
隠しファイルまでみたい場合は
ls -la
を実行して下さい。

また、gitの習わしなのかディレクトリには「.git」をつけるようです。

ターミナルでprojectname.gitまで行って
git init --bare
を実行することもお忘れなく!

以上!

2014年8月17日日曜日

【開発】スマートフラグをgithubに公開しました!

いつも使っているgithubですが、
いつもcloneするばかりで
何気に自分のレポジトリをアップしたことがありませんでした。

一度もレポジトリを作ったことがないってのもなんので、
スマートフラグのソースコードをgithubに公開してみようと思います。

git@github.com:leegun/smartflag.git

アプリをダウンロードして、コードがどうなっているのか気になる方はクローンしてみてください。
何か指摘などありましたら、コメント下さい。m(__)m
まだまだ未熟者ですがアドバイス頂ければ幸いです。

【ハマリポイント】
pushしましたが、下記エラーで蹴られました。

ERROR: Permission to leegun/smartflag.git denied to leegun.

fatal: Could not read from remote repository.

自分の場合公開鍵がgithub側に登録されてなかったのが原因でした。
別アカウントとごっちゃになって再確認したら登録されてませんでした。

githubログイン後、
1.右上のスパナ画像の設定ボタンをタップ
2.左側の「SSH Keys」を選択
3.Add SSH keyをタップしてtitleとkeyを入力

※keyはPCのホームディレクトリの.ssh直下に.pub形式のファイルであります。
id_rsa.pubとか

鍵の作り方は別途ブログ参照
http://e-days.info/2011/05/ssh-keygen/

2014年8月11日月曜日

【開発】AppStoreに反映されるまで

スマートフラグを無事リリースしましたが、
Ready for Saleになったにも関わらず、AppStoreになかなか反映されません。

24時間経過して気づきました。
Rights and PricesのAppの使用可能日が1年ほど先になっていることに!

審査前に入力してど忘れしてました・・・^^;

みなさんも同じ過ちを犯しませんように。



以上!

2014年8月10日日曜日

【開発】スマートフラグ リリース!!

国旗を楽しく覚えられるアプリ「スマートフラグ」をリリースしました!

今、思えばワールドカップ見てて結構、国旗って色々あるな〜と思ったのが始まりです。

まず、何と言っても無料!!

何気にプログラミングよりリソースを整えるのに時間が・・・
画像のサイズとか、国情報の打ち込みとか・・・ーー;

個人的に
一覧から詳細への画面遷移アニメーションとか
詳細から横スワイプで次の国旗に遷移させるところを
UICollectionViewのLayoutアニメーションを駆使して作ったところがGoodだと思ってます。

あと左下のメニューボタンを長押すると・・・

全く大したアプリではありませんが、
ぜひ、ダウンロードして感想を聞かせて下さい!m(__)m

https://itunes.apple.com/us/app/smart-flag/id904656161?l=ja&ls=1&mt=8

以上!

【開発】AppStoreへリリースする際にIDFAエラー

AppStoreへリリースをする際に質問内容の項目が増えていて、





・どうやら広告のSDKを含みますか?と言う質問に「NO」選んだのも関わらず広告SDKを含めてXcodeでアップロードすると下記のエラーで蹴られます。

improper advertising identifier [IDFA] usage. your app contains the advertising identifier [IDFA] api but you have not indicated its usage on the prepare for upload page in itunes connect

この場合、一旦手動でリジェクトし再度アップロードする必要があります。
英語でちゃんと読まなかったのが良くないですが、それくらいローカライズしてくれてもと嘆いてます。

ちゃんと翻訳してくれてるリンク
http://ios-dev.seesaa.net/article/394327576.html

以上!

2014年7月26日土曜日

【開発】vimの矩形選択でラクラク編集!!

Vimとは高機能エディタとしてエンジニアにとても人気の高いエディタです。

その機能の一つが「矩形選択(ctr + v)」!!

例えば、下記のようなコードがあるとします。

hogeName01 = "aaa";
hogeName02 = "bbb";
hogeName03 = "ccc";
hogeName04 = "ddd";
hogeName05 = "eee";

このhogeの部分が実はfooでしたとなった場合、どうしますか?

back spaceで消してfooを書いてカーソルを下に移動して・・・・(繰り返し)

上記は貴重な時間の無駄使いです。。
こんな時に使えるのが矩形選択(ctr + v)です。

1. hogeの先頭にカーソルを移動
2. ctr + v (矩形選択でhogeをカーソル移動で囲む)
4. d (hoge削除)
5. ctr + v (矩形選択で行数分下にカーソルを移動)
6. shift + I (←ここがミソ!)
7. fooを入力
8. escで入力モードから外れる

すると、hoge->fooへ!
fooName01 = "aaa";
fooName02 = "bbb";
fooName03 = "ccc";
fooName04 = "ddd";
fooName05 = "eee";

ブログで説明するのが困難だわ・・・
ぜひ、実際にお試し下さい。m(__)m

以上!!

2014年7月25日金曜日

【変換】eps -> png 一括変換!

epsファイルを一括でpngに変換する方法!

巷には色々な方法があるようですが、
「ImageMagick」を使った方法を紹介します。

参考URL:
http://naganegi0505.hatenablog.com/entry/2013/01/28/173302

手順:
1.Xcodeをインストール(省略)

2.MacPortsをインストール

■まずはパッケージをダウンロード
https://distfiles.macports.org/MacPorts/
※MacPorts-2.3.1-10.9-Mavericks.pkgをダウンロードしました。

■環境変数にパスを通す。
ターミナルを開いて
cd                                  <-ユーザーのホームディレクトリに移動
vim .bash_profile           <-.bash_profileをvimエディタで開く。初期は.bash_profileはない

■.bash_profileに下記を記述
export PATH=/opt/local/bin:/opt/local/sbin/:$PATH
export MANPATH=/opt/local/man:$MANPATH

■確認
source .bash_profile

■MacPortsをアップデート
sudo port -d selfupdate
sudo port -d sync

■ImageMagickをインストール
sudo port install ImageMagick

3.espファイルがあるディレクトリに移動して下記コマンドを実行

mogrify -density 100 -format png -geometry 640x427 *.eps

-formatで拡張子を指定。png jpg bmp

-geometryでイメージサイズを指定 640x427

イラストレーターやGIMPなどのバッチで作る方法もありますが、エンジニアからしたらコマンドラインで一括で変換出来る方が良いですね!!

以上!!

2014年7月21日月曜日

【開発】UITableView,UICollectionViewのCellからIndexPathを知る方法!

開発していて現在表示されているCellだけ更新した場合がある。
その場合、下記で取得できる。


[self.collectionView visibleCells]

だが、さらにIndexPathがわからないと更新できない。

CellからIndexPathを知りたい場合は下記で

[self.collectionView indexPathForCell:cell]

そして更新する場合は下記です。

[self.collectionView reloadItemsAtIndexPaths:indexPaths]


これらを組み合わせて下記のようなメソッドを書いてviewDidAppearとかで呼んでます。

-(void)allCellReload
{
    NSMutableArray * indexPaths = [NSMutableArray new];
    for (UICollectionViewCell * cell in [self.collectionView visibleCells]) {
        [indexPaths addObject:[self.collectionView indexPathForCell:cell]];
    }
    [self.collectionView reloadItemsAtIndexPaths:indexPaths];
}

以上!!

2014年7月12日土曜日

【開発】iosアプリで複数人で開発したい!

会社で開発を行っていると複数のメンバーで開発することは当たり前になってきてます。

もちろんgitを使ってソースコードを管理してますが、
サーバーのアドレスを定数で記述していて各々のメンバーの開発環境に向き先を保持させたい場合にgitが毎回コンフリクトしてしまいますね。

本番環境と開発環境は
#ifdef DEBUG
#define URL             @"http://dev/api"
#else
#define URL             @"http://honban/api"
#endif
こんな感じに振り分けてますが・・・
メンバーの数だけ分けるにはどうすれば・・・><;

と悩んでいたら隣の方にEditSchemaに記述して読む方法を伝授して頂きました。

・プロジェクトをクリックしEdit Schemaを選択。


・ArgumentsタブのEnvironment VariablesにURLを追加します。

ここに記述した値はGitにも含まれないようです。(どこに保持しているのかわかりません。^^;)

ですがUSBケーブルを抜くとEditSchemaの値を見てくれないようです。
当分はこの方法で抜く場合は各メンバーの開発環境に書いてしまえば良しとしときます。

みなさん、どのようにしているのでしょうか?
良い方法あれば教えて下さい。m(__)m

以上!!

【開発】最前面にViewを表示したい!


UIを作成していて、最前面にダイアログを表示したい場合ありませんか?
UIAlertViewを使用しても良いのですが、自分でオリジナルのビューを作ることもあるかと思います。

ただ単にUIViewControllerにaddSubViewだと最前面にならない場合がありますし。。。

そんな時はwindowにaddSubViewしたいのですが、オブジェクトの取得にどうすればいいの悩んだので調べたところ下記のように取得するようです。

UIWindow *window = [[UIApplication sharedApplication].delegate window];

[UIApplication sharedApplication].delegateでAppDelegateを取得している事に気づいたかと思います。
UIApplicationはシングルトンクラスでsharedApplicationでどこでも取得できるみたいですね。
AppDelegateのインスタンス変数も取得出来ますので色々と便利です。

以上!!

【開発】Blockの強参照

ios開発を行っているとよく使うBlock。

Blockとは無名関数と言うやつです。

Block内でよくselfを呼び出してしますのですが、Block内でselfを呼び出すと強参照(strong)となり開放されないということを最近知りました。

Block内でselfなどクラスのインスタンスオブジェクトを呼び出す場合は一旦weakでインスタンスを作成し使用しましよう。

__weak HogeClass * weakSelf = self;


メモリ落ちが頻発してから気づくとかなりの箇所で修正が必要となり大変な事になりますので、なるべくBlockを使用する時は気をつけましょう!

以上!!

【初投稿!】 ios 開発ブログ

はじめまして、iosエンジニアの李です。

日頃の備忘録メモと
詰まった、ハマったなどの共有を目的に

iosアプリ、サーバーサイドの開発ブログをこれから書いていこうと思います。

まだまだ、未熟者でありますので、
間違いなどありましたら、ご指摘頂けると助かります。m(__)m