Simple gadget life programming diary

Simple gadget life の中の人によるプログラミングメモ

Mac移行後にiOSアプリをリリースする際は"Provisioning Profiles"の移行もやっておく

タイトルのままですが、リリースするときにすぐに分からなかったのでメモ。

リリースする際にXCodeの以下の場所で「Provisioning Profiles」の設定を行う。
Project→Build Settings→Provisioning Profiles

f:id:jtaka1012:20140221203557j:plain

うまくProvisioning Profilesが設定されていない状態だと、ビルドしてOrganizerが立ち上がり、Validateと押下し、先にすすめていくとProvisioning Profilesを設定する場所に来る。しかし、リリース用のものが無いと先に進めない。

で、どうやって移行するかというとこちらから改めてダウンロードしてくる。
iOS Certificates | Apple Developer

場所は以下の画像の通り

f:id:jtaka1012:20140221203622j:plain

ダウンロードしたら、そのファイルをダブルクリックするだけ。そうしたらXCodeに自動で取り込まれる。取り込まれたファイルを使って上記2箇所の設定で適応して上げればOK。

WordPressでBootstrapを使う際、画像サイズを可変させる方法。

WordPressが出力するimgタグをそのまま使った場合、Gridシステムを使ったとしても画像サイズは変更されず横が切れて表示されてしまう。これを回避するために以下の対応を行う。

投稿記事の場合

functions.phpに以下のコードを追記する。
やってる事は、一度Wordpressが吐き出した投稿記事から「"alignnone(この箇所は任意の文字列)"」を探し出し、それを「"img-responsive"」に置き換える。
Wordpressはデフォルト記事の画像を出力する際、クラスに「alignnone」という文字列から始まる名前を付与するのでその箇所を書き換えることでレスポンシブ対応する。

add_filter('the_content', 'imgresponsive_replace');
function imgresponsive_replace ($content){
   global $post;
   $pattern = "/\"alignnone(.*?)\"/i";
   $replacement = 'img-responsive';
   $content = preg_replace($pattern, $replacement, $content);
   return $content;
}

サムネイルの場合

サムネイル出力をする箇所を以下のように変更。
サムネイルのurlを変数に格納しそれを別途imgタグを作って使う。クラスはレスポンシブ対応するよう"img-responsive"を指定する。

<?php
$image_id = get_post_thumbnail_id();
$image_url = wp_get_attachment_image_src($image_id, true);
?>
<img src="<?php echo $image_url[0]; ?>" class="img-responsive" alt="thum">

iOSアプリのバージョンアップ申請手順

iTunes Connectへログオンし、
Manage Your Apps→対象となるアプリアイコンを選択→New Versionと書かれたエリアのボタンをクリック。
書かれている内容に従って選択し、Waiting For Uploadとなるまで進める。

その後はこちらの「Xcode でアプリをビルドしてアップロードする」あたりから書かれている内容の参考にしてアップロードを進める。

Xcodeでコードに自動設定される"Created by"と"Copyright"の元ネタ

Xcode5にて調査。
"Created by"について
→システム環境設定→ユーザーとグループ→現在のユーザーにて表示されているフルネーム

"Copyright"について
Xcodeでプロジェクトを新たに作成する時に入力するOrganization name

デバッグ時のみ有効となるようにNSLogをマクロ化して使う

デバッグ時にNSLogを使って動作確認するが、本番モジュールでは無効化したい。
そのため、マクロを用いて別関数名で定義する。

//ヘッダーimport文の下あたりに定義
#if DEBUG
#define MyLog(fmt,...) NSLog((fmt),(__VA_ARGS__))
#else
#define MyLog(fmt,...)
#endif

上記の場合、

int a = 10;
MyLog(@"a=%d",a);

のように何かしら引数が1つは必要となる。
この場合

MyLog(@"test");

といった単純に引数を伴わない出力ができない。そのような場合は以下とする。

//ヘッダーimport文の下あたりに定義
#if DEBUG
#define MyLog(...) NSLog(__VA_ARGS__)
#else
#define MyLog(...)
#endif

これで出力されるようになる。

追記
*-Prefix.pchという場所に書くとどのソースからでも参照できるので便利だそうな。
NSLog デバッグ用の各種ログマクロまとめ

Objective-Cのプロトコルの宣言と定義について。

ネット上で各種サンプルをみていると、宣言時と定義が同じタイミングで行われており、戻り値の定義でvoid以外が使えなかったり、引数にNSArrayや独自クラスなどが使えなかったりしていた。
どうすれば使えるかという事についてメモ。

//ヘッダーファイル
#import <Foundation/Foundation.h>
@protocol testObjectDelegate; //この部分ではプロトコルの宣言だけで終了。

@interface testObject : NSObject

@property (nonatomic,retain) id delegate;

-(void)buttonPushed;

@end

@protocol testObjectDelegate <NSObject> //ここにプロトコルの定義を記載。

- (void)delegateMethod:(testObject*)testobject; //自分を引数としてデリゲートの利用先へ送る事が出来る。

@end

デリゲートの宣言はクラスのヘッダーファイルの先頭で、デリゲート定義はクラスのinterface定義後に定義。これで使えるようになる。