初心者サラリーマンのiPhoneアプリ開発60日奮闘記

iOSプログラミング初心者サラリーマンがiPhoneのアプリを開発する日記。アプリ開発を思い立った日から公開日までの60日間(目標)の独り言。

閏年の判定式(Objectiv-C if文)

f:id:iosapp:20130926213034p:plain

 

 自分が作りたいアプリには直接関係なさそうだけど、閏年判定の話。

Xcode 4ではじめるObjective-Cプログラミング 改訂第2版」の中に閏年判定について書いてあって、あぁこれの判定式(パターン1)は簡単で良いと思ったので、自分であえて考えてみためんどくさいパターン(パターン2)と比較してメモ。ちょっと考えると単純で簡単そうな閏年の判定が意外と深いことが分かった。

 

 

- (void)viewDidLoadの中の[super viewDidLoad]の下に以下を記載し実行。

 

 

// 4で割り切れる  → 閏年

// 100で割り切れる → 平年

// 400で割り切れる → 閏年

 

int year;

 

year = 2013;

 

//パターン1

if (year % 4 == 0){

 if (year % 100 == 0){

  if (year % 400 == 0){

   NSLog(@"パターン1-1: %d年は閏年", year);

  } else {

   NSLog(@"パターン1-2: %d年は平年", year);

  }

 } else {

  NSLog(@"パターン1-3: %d年は閏年", year);

 }

} else {

 NSLog(@"パターン1-4: %d年は平年", year);

}

 

//パターン2

if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){

 NSLog(@"パターン2-1: %d年は閏年", year);

} else {

 NSLog(@"パターン2-2: %d年は平年", year);

}

 

 

正しく書かれていれば、エディターエリアの右下に

 

パターン1-4: 2013年は平年

パターン2-2: 2013年は平年

 

と出るはず。13行が5行になった。

 

 

(メモ)

下の図の緑色の部分が閏年、それ以外が平年。

f:id:iosapp:20130927124703p:plain

 パターン1の場合、

・最初のifで「4で割り切れる枠」で囲って、

・2番目のifで「100で割り切れる枠」で囲って、 

・3番目のifで「400で割り切れる枠」で囲って、

  400で割り切れる → 3番目のif枠の内(3) → 閏年(パターン1-1)

  400で割り切れない → 2番目のif枠の内で3番目のif枠の外(2) → 平年(パターン1-2)

   100で割り切れない → 1番目のif枠の内で2番目のif枠の外(1) → 閏年(パターン1-3)

   4で割り切れない → 1番目のif枠の外(4) → 平年(パターン1-4)

とめんどくさいしややこしい。

 

 パターン2の場合、

 ・最初のifで一度に(1)と(3)を切り取って(*下の2つをORで結んでいるので、その両方が閏年。)

  year % 4 == 0 && year % 100 != 0 → (1)の部分 → 閏年

  year % 400 == 0 → (3)の部分 → 閏年

   切り取った部分以外の部分(2)と(4) → 平年

としてる。簡単。

 

iOS 7 Tech Talksに申し込んでみた

f:id:iosapp:20130926204538j:plain

 

11日ぶりにブログ更新。

 

Appleから「iOS 7 Tech Talks」っていうiOSアプリ・ゲーム開発の勉強イベントの案内メールが届いた。基本英語って書いてあってちょっとひるんだけど、翻訳がある場合があるらしいとも書いてあったので、とりあえず申し込んでみた。抽選らしい。

 

さて、


作ろうと思っていた画像・カメラアプリの機能がほとんど、iOS7の標準のカメラアプリで実現できることが判明して、しばらくモチベーションが下がってた。やる気がなくなってたものの、何冊か参考書を買って地味に少しは勉強中。なんとなくゲームがいいかなと思い始めた。

 

(買ってみた参考書)

1.Xcode 4ではじめるObjective-Cプログラミング 改訂第2版

Xcode 4ではじめるObjective-Cプログラミング 改訂第2版

Xcode 4ではじめるObjective-Cプログラミング 改訂第2版

 

 買って良かった。Objective-Cの基礎知識が勉強できる。前に買った「絶対に挫折しない iPhoneアプリ開発「超」入門【iOS6対応版】」だと説明が簡単すぎて逆に良く分からないObjective-Cの基本的な文法が書いてある。やっぱりObjective-Cの基礎知識は必要と感じた。

 

2.やさしくはじめるiPhoneアプリ開発の学校

やさしくはじめるiPhoneアプリ開発の学校

やさしくはじめるiPhoneアプリ開発の学校

 

これも買って良かった。最初見た時、ちょっと簡単すぎて物足りないかなとも思ったけど、そんなことはなくてホントの初心者はこれくらい簡単なものから作るのが良いのかも。

 

3. iPhoneプログラミングUIKit詳解リファレンス

iPhoneプログラミングUIKit詳解リファレンス

iPhoneプログラミングUIKit詳解リファレンス

 

 iOSアプリの開発の要になるフレームワークであるUIKitに焦点を絞って詳しく説明している参考書。この本の前書きに「UIKitは、すべてのiPhoneアプリケーションのコアとなるフレームワークだ。」なんて書いてあって、そう言われると、なんとなくこれは知っておかなければと思って手を伸ばした。でも、もう少し基礎的な勉強をしてから買っても遅くなかったかも。積読中。

 

4.cocos2d-xによるiPhone/Androidプリプログラミングガイド

cocos2d-xによるiPhone/Androidアプリプログラミングガイド

cocos2d-xによるiPhone/Androidアプリプログラミングガイド

 

なんとなくゲームの開発がしてみたいと思って、iPhoneのアプリ開発コーナーに何冊かあったゲーム開発本の中から、何冊かを見比べてあまり深く考えずに購入してしまった一冊。買ってからcocos2d-xのフレームワークC++で開発することが分かり、「まだObjective-Cもろくに理解していないのに大丈夫か。。。」となってしまった参考書。積読中。

 

 

 

 

 

自分が作ろうと思っていた写真アプリがiOS7のカメラアプリでほぼ実装されていた話

 

f:id:iosapp:20130915130324p:plain

 

自分でつくり作りたいと思っていた

・スクエアで撮れて

・ポラロイドやインスタグラムみたいなフィルタがかけられる

機能を持ったアプリ。

 

どちらの機能も、iOS7のカメラアプリに標準搭載されていることが分かり、モティベーションが急激に低下中。嗚呼。最新のiPhoneだけでなくiPhone 4でも利用できたし。ただ、フィルターをかけるときの操作方法は好みじゃないけど。

 

Appleが標準で用意してしまった機能を再開発する必要もあまりないので、別のアプリを作るか、作るとしたら何を作るか考え中。。。

<>が付いたクラスの宣言部分の意味がよく分からない話

 

f:id:iosapp:20130830103916p:plain

参考書とかネットとかに載ってるサンプルプログラムを読んでいて、

@interface myClass: NSObject

 ~

@end

みたいなシンプルなクラスの宣言はわかるけど、そうじゃない、クラス名の後に<>で色々書いてある

@interface myClass: NSObject <xxxxxDelegate>

 ~

@end

みたいな宣言の意味がよく分からなかった。デリゲートとかプロトコルとか。。。

 

調べていて、参考になったのが下記サイト。

 

Objective-C入門その4:クラス宣言をマスターする - サルにもできるiPhoneアプリの作り方

http://ameblo.jp/micro-garden/entry-10333214828.html

 

なんとなく分かったような気がする。

 

 

 

A valid provisioning profile matching the application's Identifier...のエラーにハマった話

f:id:iosapp:20130911213130p:plain

2013-09-08に書いた「カメラロールを表示して選択した画像にフィルタをかける処理」の続き。

 

せっかく、iOS Developer Programの登録が完了したので、実機でテスト。

が、ビルド失敗。

「A valid provisioning profile matching the application's Identifier...」エラーが出る。コードに間違いがないことは何度も見なおして確認。

参考書

絶対に挫折しない iPhoneアプリ開発「超」入門【iOS6対応版】

絶対に挫折しない iPhoneアプリ開発「超」入門【iOS6対応版】

通り手続きをし、Provisioning Profileも正しく取得できているはず。

でも、実機にインストール出来ない。

ググっても情報が古かったり自分の状況と違う場合しか載ってない。

デベロッパープログラムのMember Centerの「Certificates, Identifiers & Profiles」の「iOS Apps」→「Identifer」→「App IDs」や「Provisioning Profile」などにもアクセスしてみるがなんとなく違う気がして何も変更せず。

 

で、xcodeに戻る。

 

結論

XcodeのWindowメニューのOrganizerを開く。

左側のナビゲーションバー?の一番上の「Provisioning Profile」を選択。

右側のスペースには(まだ)何も情報が出ていない。

画面右下のRefreshボタンを押す。

右側のスペースにProvisioning Profileの情報が出てくる。(上図)

これでRunしたら無事実機にインストールできた。