Currently viewing the category: "日常"

CoreDataといえばデータを保存する手段であると同時に、MVCのMであるモデル構造を作るのに使われます。
しかし、モデル構造を持つ全てのデータが保存したいかと言われるとそうではありません。

たとえば、webから一時的にデータを持ってきて、そのなかからお気に入りのものだけ実際に保存するとかいうこともあるでしょう。それのためにいちいち保存していたら保存に使う時間も、CPUのリソースももったいないです。
というわけで、CoreDataで保存しない一時的なManagedObjectを作る方法を紹介します。

※保存しない分、時間とCPUの節約にはなりますが、メモリの節約にはなりません。
大量のデータを使うときは保存することでメモリを節約したほうがいいかもしれません。

Continue reading »

 

iPhoneアプリのUIデザインは重要です。
よいUIは使いやすくそれだけで好まれることもありますが、UIが悪ければ使ってすらもらえないこともあります。

使いやすいUIを作るにはセンスが問われるわけですが、センスとはあいまいなものです。
センスからあいまいさを取り除き、なぜそれが良いデザインなのか、どこがいいのかを追求すると、それは学問となります。
学問としてデザインを学ぶとセンスが必要なくなるだけでなく、ぶれることなくいつでもよいデザインを作ることができるようになります。

UIを学問ととらえたときにいくつか重要な事柄があるので、何回かに分けて紹介したいと思います。

Continue reading »

 

plistファイルはデータの格納としてよく使うと思います。
そのplistファイルに実は種類があるんです。

種類と言っても中身のデータが違うとかではなくて、xcodeでいかに簡単にplistを作るかという意味での種類になります。
読み込み方法などは全く同じです。

一番わかりやすいのだとinfo.plistですね。これはアプリの情報の設定を書く種類のplistです。
このplistはキーを選択して、valueを書くという形にxcode上でなっていますが、自作のplistでもこういう風にキーを選択し気にすることができます。

やり方は簡単で、自作のplistの空白部分を右クリック→Property List Typeから好きなタイプを選ぶだけです。

これを選ぶだけで、キーが選択式になります。

これが何に使えるかというと、設定画面に使えるんです。
アプリ内に設定画面を持っているアプリは多いと思うのですが、その設定画面の項目を書くのにどのように書くのが一番いいか・・・を探していました。
ソースに直書きではなく、変更も簡単にできるplistで書こうと思ったのですが、キーをいちいち書くのめんどくさい!と思っていたら、plistに種類があるのを知ったのです。

使いやすすぎて忘れることはないと思いますが一応メモっとこう、ということで。

 

iPhoneで画像を作成することがあったので、やり方をまとめておきます。
以下の方法で取得できるのはautoreleaseなUIImageなので、間違ってreleaseしたりretainし忘れたりしないように気をつけてください。



■基本

[objc]
UIGraphicsBeginImageContextWithOptions(サイズ, 透過の有無(NOで透過有), スケール(0でデバイス固有));
//描画
UIImage *createdImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[/objc]



■特定のViewを画像として取得

layerを使うので
[objc]
#import <QuartzCore/CALayer.h>
[/objc]
が必要となります。

[objc]
UIView *view;
UIGraphicsBeginImageContextWithOptions(view.bounds.size,NO, 0);

CGContextRef contet = UIGraphicsGetCurrentContext();
[view.layer renderInContext:contet];

UIImage *createdImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[/objc]



■UIImageを描画
[objc]
UIImage *img;
UIGraphicsBeginImageContextWithOptions(img.size, NO, 0);

CGRect frame = CGRectMake(0, 0, img.size.width, img.size.height);
CGContextRef context = UIGraphicsGetCurrentContext();
//上下逆対策
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0, img.size.height );
CGContextScaleCTM(context, 1, -1);

CGContextDrawImage(context, frame, img.CGImage);

CGContextRestoreGState(context);

UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[/objc]
※普通に描画すると上下が逆になるので座標変換をする



■座標を用いて幾何学図形を書く(がんばれば複雑な図形も)
例)中心(50,50), 半径50の円を書く
[objc]
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
CGContextRef contet = UIGraphicsGetCurrentContext();

UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0,0,100,100)];
[[UIColor blackColor] setFill];
[path fill];

UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[/objc]



■影をつける
[objc]
UIImage *img;
UIGraphicsBeginImageContextWithOptions(size, NO, 0);

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextSetShadow(context,影の向き, 影のぼけ具合);
//描画
CGContextRestoreGState(context);

UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[/objc]



■マスクする

白黒画像をマスク用に用意してあげると、マスク用の画像の白い部分を透明にした画像が作れます。
黒い部分だけ残した画像ではありません。この違いは色がついたりアルファの入った画像をマスク画像にしたときにはっきりとわかります。

[objc]
- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage * )maskImage {

CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef),
NULL,
false);

CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
CGImageRelease(mask);
UIImage *maskedImage = [UIImage imageWithCGImage:masked];
CGImageRelease(masked);
return maskedImage;
}

[/objc]

だいたい使ったのはこれぐらいでした。
大抵のことはこれらの組み合わせですべて出来ると思います。

 

サーバー+SendMail+Gmailで独自ドメインメールの設定をしてみました。
案外簡単で、調べながらで2時間ぐらいでできてしまいました。



■SendMail受信用の設定

  1. sendmailの設定簡略化プログラムのインストール
    [plain]sudo yum -y install sendmail-cf[/plain]
  2. sendmailの設定変更
    [plain]sudo vi /etc/mail/sendmail.mc[/plain]
    外部からメールを受け取らない設定をコメントアウトする
    [plain]
    DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)

    dnl # DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)
    [/plain]
  3. sendmailの設定適用
    [plain]m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf[/plain]
    ※パーミッションエラーが出た時は
    [plain]sudo chmod 777 /etc/mail/sendmail.cf[/plain]
    をやってからもう一度やって下さい
  4. 自分のホスト名設定
    [plain]sudo vi /etc/mail/local-host-names[/plain]
    改行区切りでメールアドレスのホスト名を指定する
    [plain]example.com
    mail.example.com[/plain]
  5. 再起動
    [plain]sudo /etc/init.d/sendmail restart[/plain]



■ファイヤーウォール

  1. ファイアーウォールのファイルを開く
    [plain]sudo vi /etc/sysconfig/iptables[/plain]
  2. 25番ポートをあける記述を追加する
    [plain]
    -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 25 -j ACCEPT[/plain]
  3. 再起動する
    [plain]sudo /etc/rc.d/init.d/iptables restart[/plain]


■SendMailにて転送用設定

  1. 設定ファイルを開く
    [plain]sudo vi /etc/aliases[/plain]
  2. 一番下に転送設定を追記する
    [plain]ユーザー名: 転送先アドレス[/plain]
    ※ユーザー名はaaa@example.comのaaaの部分
  3. 適用する
    [plain]sudo newaliases[/plain]

これだけでメールの転送が簡単にできます。
メーリスを作りたいなどある場合は最後の/etc/aliasesのみを変更すればできます。
複数アドレスに転送するにはカンマ区切りで転送先アドレスを指定すればOKです

転送用設定は何通りも書き方があって、ネット上ではいろいろな方式で情報が飛び交っているようでした。
どの方法が適切なのかというのはこちらが参考になりました。

 

svnで自分がよく使うコマンドをまとめてみました。
よく忘れるのはリポジトリ作成とタグ作成あたりです。

■svnのリポジトリを作る
フォルダを作り、権限をsvn用のユーザーに譲る
[plain]sudo svnadmin create /…/svn/プロジェクト名
sudo chown ユーザー名:ユーザー名 プロジェクト名 -R
[/plain]

■ローカルにデータを持ってくる
保存先のフォルダの位置で実行する
[plain]svn co リポジトリのアドレス 保存先のフォルダ名[/plain]

■変化チェック
[plain]svn st[/plain]

■コミット
[plain]svn commit -m "コメント"[/plain]

■タグ作成
[plain]svn cp リポジトリのアドレス タグ作成先のフォルダ名[/plain]

 

iPhoneのゲームライブラリで有名なCocos2dをインストールしてみました。
ちょっと前にxcode4対応のv1.0.0がでて、今はもうv1.0.1が出ているようです。

インストールにはターミナルを使わないと行けないのでちょっと大変ですが、cocos2dはなかり便利&使える来無頼ですので、ゲームを作るなら一度は使ってみたらいいと思います。

■インストール

  1. 本家サイト→Downloadsタブより最新版をダウンロード
    (今回はcocos2d-iphone-1.0.1.tar.gzでした)
  2. ファイルを解凍する
    Macの場合、ダウンロードしたファイルをダブルクリックするだけで解凍されます
  3. メニューからアプリケーション → ユーティリティ → ターミナルを開く
  4. ターミナルで先ほど解凍したフォルダまで移動する
    例)自分の場合はDownloadsフォルダで展開したので次のようになります
    [plain]cd /Users/ユーザー名/Downloads/cocos2d-iphone-1.0.1[/plain]
  5. インストールコマンドを実行する
    [plain]sudo ./install-templates.sh -f[/plain]
    sudoなので、パスワードが聞かれると思いますがPCにログインするときのパスワードを打ってください。
    -fは強制インストールを意味して、簡単に言うと古いcocos2dを上書きしてインストールしてくれます。
    初めてインストールするならいらないかもしれません.

これでインストール完了です。
ためしに新しいプロジェクトを作ろうとして、次のようなテンプレートが出てくればOKです

 

アプリに必要な画像のサイズを毎回調べるのがめんどくさくなってきたのでココに書いておきます。
意外と知らないサイズ指定があって驚きました。

ソースはiOS Human Interface Guidline
本家なので多分まちがいははない・・・・はず

ちなみに括弧になっているのはガイドラインにはのってなかったけど、経験則的にOKな画像サイズです

■必須画像

iPhone iPhone(Retina) iPad
アプリアイコン 57×57 114×114 72×72
起動画面 320×480
(320×460)
640×960
(640×920)
768×1004
1024×748
AppStoreアイコン 512×512

■オプション

iPhone iPhone(Retina) iPad
スモールアイコン
(検索や設定で使う)
29×29 58×58 50×50
29×29
ドキュメントアイコン 22×29 44×58 64×64
320×320
Webクリップアイコン 57×57 114×114 72×72
ツールバーアイコン 約20×20 約40×40 約20×20
タブバーアイコン 約30×30 約60×60 約30×30
 

ブログこちらに移します。

このブログは”同じことを何度も繰り返さない”を目標としたブログです。
プログラム中に毎回忘れて調べることをまとめたり、日々繰り返すことをより簡単にするツールを紹介or作成していきます。

具体的には

  • iPhoneアプリ開発関係
  • Webサーバー関係(PHP, Mysql, JavaScript)

などを書いていく予定です

ときどきソースコードも公開します。