2014年4月9日水曜日

Xcodeのシミュレーターで日本語、英語を簡単に切り替える方法

iOSアプリをローカライズ(多言語対応)している場合、いくつかの言語環境で動作確認をしなければなりません。
でも、シミュレーターを起動してから、iOSの設定で変更するのって結構面倒ですよね。
そこで、最初から言語環境を指定して起動するやり方をご紹介します。


Xcodeでプロジェクトを開き『New Scheme…』



分かりやすいスキーム名を入力



新しく作ったスキームを『Edit Scheme…』



Arguments Passed On Launchを入力


日本語の場合『-AppleLanguages (ja)』
※(ja)の前に半角スペースが入ります


スキームで言語を切り替えシミュレーターを起動


同じ要領で英語(en)のスキームも作成すると言語切り替えできる




『パズ銭』はハマり過ぎ注意な中毒者続出のパズルゲーム

パズ銭 ~スワイプで両替パズル

2014年4月4日金曜日

公開したiOSアプリをApp Storeから削除する方法

公開したiOSアプリをApp Storeから削除(公開停止)する方法が分かりにくかったので、備忘録として記載します。


iTunes Connectにログインし『Manage Your Apps』
対象のアプリを選択し『Rights and Pricing』

『specific territories』をクリック

『Deselect All』で全てのチェックを外して『Save』

アプリのステータスが『Developer Removed From Sale』となればOK








2014年4月3日木曜日

iTunes ConnectのMarketing URLはここに表示される

iTunes Connectでアプリを申請するときに『Marketing URL』って入力してますか?

私は必須項目ではない(Optional)なので今まで入れてませんでした。
また、何の為の項目でどこに表示されるのか、正直ピンときません。
そこで、実際に入力してどんな意味があるのか試してみました。

結論から言うと、PCブラウザで見るiTunesのページに表示されることが分かりました。
アプリのサポートページの左隣に『"開発者名"Webサイト』としてリンクがでます。
このリンクもアプリによって出てたり無かったりしたので、その謎も解けました。


また、PCのiTunesでアプリのページを開いたときにもリンクが表示されました。


ちなみに、iPhoneで見るApp Storeではどこにも表示されないようです。

とりあえず、自分のサイトに誘導できるリンクが表示されるので、入力しておいて損はなさそうです。
逆に言うと、そういうサイトが無いのであれば入力しなくても問題なさそうですね。







2014年4月2日水曜日

iOSアプリで簡単にインジケーターを表示する方法

iOSアプリでデータの少し時間のかかる処理(データの読み込みなど)をするときにインジケーターを表示したくなります。
ちなみにインジケーターとは以下のようなグルグルするヤツです。


標準でインジケーターを表示するやり方は以下のようになります。


UIActivityIndicatorViewを使用


==============================================

UIActivityIndicatorView *ai = [[UIActivityIndicatorView alloc] init];
ai.frame = CGRectMake(0, 0, 50, 50);
ai.center = self.view.center;
ai.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
[self.view addSubview:ai];

[ai startAnimating];

==============================================

ただ、このやり方はいまいち使い勝手がよくありません。
そこで、標準以外のライブラリを使ってみました。



SVProgressHUDを使用


導入方法はとても簡単です。

ライブラリを以下よりダウンロード

ライブラリから以下のファイルをプロジェクトに追加
  • SVProgressHUD.h
  • SVProgressHUD.m

プロジェクトに以下のフレームワークを追加

  • QuartzCore.framework


これだけでOK、あとは以下のように書くだけ

==============================================

#import "SVProgressHUD.h"

//インジケーターを表示
[SVProgressHUD show];

//インジケーターを消す
[SVProgressHUD dismiss];

==============================================




ただ、このライブラリはiOS6だとなぜか落ちてしまったり、ARCではない環境では上手く動かなかったりして、私の環境では使えませんでした。


MBProgressHUDを使用


こちらも導入は簡単です。

ライブラリを以下よりダウンロード

ライブラリから以下のファイルをプロジェクトに追加
  • MBProgressHUD.h
  • MBProgressHUD.m

あとは以下のように書くだけ

==============================================

#import "MBProgressHUD.h"

//インジケーターを表示
[MBProgressHUD showHUDAddedTo:self.view animated:YES];

//インジケーターを消す
[MBProgressHUD hideHUDForView:self.view animated:YES];

==============================================


こちらのライブラリはiOS6でも非ARC環境でもOKでした。
また、以下のように背景の色を変えたり、テキストを表示できたり使い勝手もよさそうです。


==============================================
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];

//背景
hud.dimBackground = YES;

//テキスト
[hud setLabelText:@"Loading..."];
==============================================




まとめ


インジケーターを表示するなら『MBProgressHUD』をオススメします。







2014年3月31日月曜日

iOSアプリを動作させる実機を追加する方法

iOSアプリを動作(Xcodeで)させる実機を追加する方法


最近、古いiPhoneを入手したので、開発で使うことにしました。
しかし、実機登録のやり方をすっかり忘れてしまったので、備忘録としてその方法を記載します。


Device登録


iOS Dev CenterでDeviceを登録
(事前準備としてXcodeのOrganizerで端末のIdentifier(UDID)を調べておく)

『Certificates, Identifiers & Profiles』→ iOS Apps 『Certificates』→『Devices』で新規登録



Provisioning Profileの変更

同じ画面で開発用のProvisioning Profileを変更

追加したデバイスを選択

変更したProvisioning Profileをダウンロード

ダウンロードしたProvisioning ProfileをダブルクリックなどでXcodeにインポート


Xcodeの設定


  1. Xcodeを起動して、登録した実機を繋ぎ『Organizer』を選択
  2. DEVICESの中から繋いだ実機を選んで『Use for Development』を押す
  3. デバイスに緑のアイコンが灯ればOK



デバイス名の変更



ちなみにXcode上に表示されるデバイス名は実機側で変更できます。
『設定』→『一般』→『情報』→『名前』









2014年3月28日金曜日

Objective-Cで簡単に遅延実行する方法

アプリを作っていると、処理を少し遅らせて実行したい場合があります。
Objective-Cでのやり方を備忘録として記載しておきます。


performSelectorを使用


『performSelector:withObject:afterDelay:』メソッドを使用すると簡単にできます。


=======================================

[self performSelector:@selector(hoge) withObject:nil afterDelay:1.0];

=======================================




ただ、このやり方は以下のような問題点があります

  • 並列処理では使えない
  • セレクターで呼ぶメソッドの引数を一つしか渡せない


これを解決するには、並列処理のときと同じようにGCDを使います。



GCDを使用


=======================================

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
    //遅延実行する処理
});

=======================================









2014年3月25日火曜日

Objective-Cで簡単に並列処理をする方法

プログラムで重い処理を実行すると、フリーズしたような状態になることがあります。
そういう場合、並列(非同期)処理をして、別スレッドに重い処理を持って行きます。
Objective-Cでのやり方を調べたので備忘録として記載しておきます。


NSOperationQueueを使用


NSOperationQueueを使用すると簡単にできます。


==========================

NSOperationQueue* queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock:^{
    //重い処理
}];

==========================

ただ、このやり方だと次のような問題点があり、単純な処理しか行えません。

  • スレッドセーフでないオブジェクトを扱えない
  • スレッドの処理を終えた後の次の処理を行うのが簡単にできない



GCD(Grand Central Dispatch)の利用


GCDとはAPIを通して処理のブロックをキューに入れると、ランタイムの方で上手く並列実行してくれるという仕組みのことです。
このやり方だと、前の方法での問題点は解決できます。


==========================

dispatch_queue_t q_global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t q_main   = dispatch_get_main_queue();
dispatch_async(q_global, ^{
    
    //重い処理
    
    dispatch_async(q_main, ^{
        
        //重い処理が終わった後の処理
        
    });
});

==========================



並列処理というと難しい印象がありますが、GCDを使えば簡単ですね。