でらうま倶楽部

バカってゆうか、ゲームを作る事しか能の無いプログラマの、面白おかしな日々を綴ってみる実験。

2010年09月

iPhoneとiPadとiPodとプログラムで見分けるには

うを!

気付けばブログが週一ペースというなんとも情けない状況に…!以前の勢いは何処へいっちゃったんだ!

け、けしてツイッターとかiPhone4買ったせいじゃないんだぜー
あっ…ちょっとだけ…。

それはさておき。

photo勢ぞろい?の図

いろんなトコから同時に「iPadやiPhone、iPodをコードで見分けられるんだろーか」と質問されとりまして、確かにそれが出来たら、より機種に併せて最適なつくりができるだろーねと、ちょっくら調べてみました。

CoCoaの日々
機種名を取得する方法はこちらが大変参考になりました。いつもありがとうございます!

んで、文字列で取得するのもアリなんですがちょこっと部長なりにアレンジ。
こんな感じ。
#import <UIKit/UIKit.h>
#import <sys/sysctl.h>

enum {
    MACHINE_SIMULATOR,
    MACHINE_IPAD,
    MACHINE_IPHONE,
    MACHINE_IPOD,
    MACHINE_UNKNOWN,
};

#define GEN_UNKNOWN  1
#define VER_UNKNOWN  1


typedef struct {
    int machine;
    int generation;
} sDeviceType;


void osInfoDevive(sDeviceType *aOut)
{
    size_t size;
    char *name;

    char *tbl[] = {
        "i386",
        "iPad",
        "iPhone",
        "iPod",
    };
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    name = malloc(size);
    sysctlbyname("hw.machine", name, &size, NULL, 0);
    aOut->generation = GEN_UNKNOWN;
    for(int i = 0; i < elemsof(tbl); i++)
    {
        aOut->machine = i;

        char *p;
        if((p = strstr(name, tbl[i])) != nil)
        {
            p += strlen(tbl[i]);
            if(*p != '\0')
            {
                int gen = atoi(strtok(p, ","));
                int ver = atoi(strtok(nil, ","));
                aOut->generation = gen * 100 + ver;
                // 世代 x 100 + バージョン これだと単純な比較で機種依存のコードを掛ける
            }

            break;
        }
    }
   
    free(name);
}

ぜんぜんObjective-Cじゃない(笑)

上のコード例みたく取得した機種名をデバイス番号バージョン番号に分解しとけば、今後新型iPhoneが出た時にも、あらかじめこんな感じに判別しとけば問題ない気がするのです。
sDeviceType device;
osInfoDevive(&device);
if(device.machine == MACHINE_IPHONE && device.generation > 300)
{
    // iPhone4以降の処理
}

あとは各自、シミュレーターの時はどう振る舞うか、iPad、iPhone、iPod以外の新機種だったらどう振る舞えばいいか…自分の開発してるアプリの内容に併せて考えてみて下さい。

プログラミングに正解は無い!…と思うのです。仕様通りに振る舞うのが大前提だけどね。その仕様も、現場現場で決まってくるものですしー。


ではまた次回!

明日はホリエさんのライブじゃー!

She明日は、いつもお世話になっとるホリエさんがレコ発ライブにでます。

9月11日
シェラザードレコ発ライブ@恵比寿ライブゲート
OPEN 18:30 / START 19:00
Advance:¥4,000 / Door:¥4,500 ドリンク別途¥500

ホリエさんはハードロック界の重鎮と言われとる凄腕ドラマー!千手観音と呼ばれたりもするそうな。


そんなホリエさんを始め、バンドのメンバーの皆さんの熱い演奏とパフォーマンスをぜひ観に行こうぜー!

iPhone『稲川淳二の怪談』シリーズ配信開始

という訳で今日から配信が始まりました!


『稲川淳二の怪談』

app01
樹海~放置車~


樹海の撮影現場へ向かうタクシー。
ドライバーが導かれた謎の場所とは…。
app02
脂ぎった顔
いつも生活している日常が闇に支配された瞬間、非日常的な空間がはじまる。
暗闇には別の何かが存在しているのかも知れませんね…。
app03
軽音楽同好会

夏期合宿の海辺の町での出来事。
皆さんも好奇心まかせの肝試しは、ホドホドにして下さいね。
app04
旧伯爵家の別邸

みなさんもお気をつけ下さい…。
心霊スポットは思わぬところにあるものです…。
app05
赤い半纏

稲川怪談の原点とも言える古典怪談。
某ラジオ局での初披露以来、四半世紀の時を経てiPhoneアプリに登場。

なんと5本同時配信。無事にリリースできました。

いや~こわいですねぇ。ゾッとしますねぇ…専用フォントの縦書きで雰囲気たっぷりです(笑)テキストならでわな怖さがあります。

猛暑(というか残暑)厳しい日が続いておりますがヒヤッ!とするには丁度良いかもしれませんよ。というか夜中に部屋で一人、iPhoneの小さい画面を覗いてると本気で怖い思いができます。いま背後に誰かいる…わけないよね!

開発者的にはAppleに「アプリ内課金にしろ」とか言われなくって内心ホッとしてます。あるいみ心臓に悪かった!


実は怪談好き、だったり興味を持ってくれた人、よければ手に取ってみてください。ではまた次回!
記事検索
電子書籍発売中

「チュートリアル形式で始めるOpenAL」
サウンド怖くない。C++による8つのチュートリアルで始めるOpenALプログラミング。さああなたも、自作アプリに魅力的な音効を添えてみませんか??
⇒Kindle版 ⇒iBooks版


「iPhoneアプリ『ういろう』のレシピ」
ゲームってどうやって作ってるの?? 拙アプリ『ういろう』の製作過程を本にまとめました。もちろんソースコードつき
⇒Kindle版 ⇒iBooks版


『チュートリアル形式で始めるOpenGL[2D編]』
OpenGL怖くない。C++による16のチュートリアルで始めるOpenGLプログラミング[2D編]。さああなたも、ゲーム作りを始めてみませんか?
⇒Kindle版 ⇒iBooks版
自作ゲーム配信中

『Puzzle & Monarch』
「君主候補となって国作り!! ただし制限時間は90秒。」森を作って道をつないで...あなただけの国を作ってみませんか??
⇒AppStore


『BRICK & TRIP』
咄嗟の判断に、あなたの指先はついてこれるか?! 爽快フリックアクション!! 様々な難関をくぐり抜けて旅の終着点を目指そう!!
⇒AppStore


『ういろう』
名古屋土産ういろうがiPhoneで大活躍?! 白ういろうを守れるのはあなただけ。ひゅーん、ぼよよーん!!
⇒AppStore ⇒LITE版


『こなへん』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒AppStore ⇒LITE版


『GEOSPOT』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒Windows ⇒Mac


『TieGunner』
マウス片手に大宇宙へ飛び立とう!『しっぽシューティング』というジャンルを作って頂きました^^; WinでもMacでも動きます。ソースもあるでよw
⇒Windows ⇒Mac
QRコード
QRコード
  • ライブドアブログ