カテゴリー「プログラミング」の21件の記事

2012/05/05

Xcodeでgitを試してみる その4

 ブランチを作ったら、それぞれのブランチを更新していきますが、いずれはマージすることになります。

1

 FirstBranchと名付けたブランチを更新しました。最新リビジョンのコメント(3つあるコメントの一番上)は「FirstBranch 1st Commit」です。

2

 masterブランチも更新しました。最新コメントは「master First Commit」です。
 FirstBranchもmasterもブランチを作ってから1回だけコミットしているので、それ以前のコメントは同じになっています。

 これから、FirstBranchに行った変更を、masterにマージします。

3

 マージするときは、マージされる側(master)にスイッチします。

4

 エディタウィンドウに移り、「File」→「Source Control」→「Merge...」を選択します。すると、マージするブランチを選択するダイアログが開きます。FirstBranchを選択します。

5

 すると、差のあるファイルが左右に並び、その変更点を見ることができます。左側がワーキングコピー(master)、右側がFirstBranchで、異なる部分はどちらを採用するかを指定します。

6

 異なる部分をクリックし、下にあるボタンでどちらを採用するかをします。すべて右側のボタンを選択すれば、masterの変更をすべて捨てて、FirstBranchを選択することになります。

 ここでは、デフォルトの状態(両方の変更を採用)でMergeをクリックしました。

8

 すると、スナップショットを撮るかどうかのダイアログが現れます。Xcodeでは、GUIからリバートする方法が用意されていないので、スナップショットを撮っておいた方が良いでしょう。

9

 スナップショットの作成がおわると、エディタ画面に戻ってきます。masterとFirstBranchの変更の両方が採用されています。

10

 Organizerウィンドウを見ると、masterのログに「Merge branch 'FirstBranch'」というコメントがついたリビジョンが増えています。その下を見ると、「master First Commit」と「FirstBranch 1st Commit」というコメントがついたリビジョンがあります。統合されたことがわかります。

11

 マージ後のFirstBranchは削除しておきましょう。「Remove Branch」をクリックすると、本当に削除して良いか聞いてくるので、「Remove」をクリックして削除します。

 今回はマージ後にFirstBranchを削除したのでそのまま削除できましたが、マージせずにブランチを削除しようとすると、「Remove」をクリックした後に、さらにダイアログが開きます。

12

 マージされることなく削除しても良いのか、というメッセージです。かまわず削除するのであれば、「Force Remove」で削除します。


| | コメント (0) | トラックバック (0)

2012/05/01

Xcodeでgitを試してみる その3

 Organizerのプロジェクト一覧からBranchesを選択します。最初、Branchesの中にはmasterだけがあります。

1

 masterブランチをクリックすると、ログが表示されます。

2_2

 さて、ここで、ブランチを作ってみます。下の方にある「Add Branch」をクリックします。

3_2

 Create a branchダイアログが開くので、ブランチ名を入力し、どのブランチから分離するのか(今はmasterしかない)を入力します。その下の「Automatically switch to this branch」を選択しておくと、ブランチを作ると同時にそのブランチに移動します。

4

 Organizerに新しいブランチが追加されました。

5_2

 ブランチの切り替え(スイッチ)をするときは、ローカルリポジトリを選択し、右下にある「Switch Branch」をクリックします。

6_2

 ブランチの選択モーダルが表示されるので、スイッチしたいブランチを選択します。これでスイッチ完了です。Organizerを閉じてプロジェクトウィンドウに戻ります。

7_2

通常のエディタ画面ではどのブランチを選択しているのかわかりませんが、バージョンエディタを選択すると、エディタ下部に現在選択しているブランチが表示されます。

| | コメント (0) | トラックバック (0)

2012/04/30

Xcodeでgitを試してみる その2

 Xcodeの右上に「Editor」という3つのボタンがあります。そのうちの右端のボタンの上にポインタを乗せると「Show the Version Editor」と出てきますが、このボタンを押すと、過去にコミットしたリビジョンと比較することができます。

2

 左側にローカルリビジョン(ワーキングコピー)、右側に、最後にコミットしたリビジョンが表示されます。左右各エディタ下部に表示されている「Local Revision」の部分をクリックすると、他のリビジョンを表示することもできますが、エディタ下部中央のTime machineアイコンをクリックすることで他のリビジョンを選ぶこともできます。

3

 左右のエディタの間にTime machineのようなタイムラインが現れます。一番下のLocalがローカルリビジョン(ワーキングコピー)、その上のbaseが最後のコミット、さらにその上が過去のリビジョンになります。このバージョンエディタでは、過去のリビジョンからのコピーと、ローカルリビジョンの編集が可能です(過去のリビジョンの編集はできません)。

 Xcode右上端に、Organizerボタンがあるので、このボタンを押すと、リポジトリを見ることができます。

5

 ツールバーから「Repositories」を選ぶと、リポジトリのログを見ることができます。左端のレポジトリ一覧で、レポジトリ名の下にBranches、Reomtes、プロジェクト名のフォルダが並んでいます。RemotesがSubversionなど中央管理型バージョン管理ソフトでいうリポジトリですが、一人でgitを使う分には、Branchesがリポジトリだと考えれば良さそうです。そして、一番下のプロジェクト名が、ローカルリビジョンに当たります。

6

 プロジェクト名をクリックすると、ローカルリビジョンのファイルとログが表示されます。

7

 リビジョン名横の展開ボタンをクリックすると、リビジョンで変更されたファイルの一覧が表示されます。「View Changes」ボタンを押すと、バージョンエディタのような画面が表示されます。


| | コメント (0) | トラックバック (0)

2012/04/28

Xcodeでgitを試してみる その1

 Subversionしか触ったことのない私ですが、Xcodeではgitが標準ぽいので、gitに挑戦してみます。

 まず、Xcodeから新しいプロジェクトを作ります。「File」→「New」→「Project」から新しいプロジェクトを作ってみます。

20120428_220800

 手始めに、Cocoa Applicationを選んでみました。

20120428_220901

 プロジェクトを保存するフォルダを指定しますが、ここで、下の方にある「Source Control:」で、「Create local git repository for this project」にチェックを入れておきます。これで、gitによる管理ができるようになります。

20120428_220924

 いつもどおりのプロジェクト初期画面が開きます。すでに、ナビゲーターエリアのプロジェクト名の横に、Mマークが表示されています。これは、gitの管理下に置かれていて、何らかの変更が加えられたファイルのマークです。

20120428_221023

 新しいクラスを作ってみます。

20120428_221103

 クラス名はTestにしました。

20120428_221117

 保存先を指定します。

20120428_221235

 Test.h、Test.mファイルが追加されましたが、その横にはAマークがついています。これは、追加されたファイルのマークです。

 ここでコミットするのは変ですが、とりあえずテストと言うことで、「File」→「Source Control」→「Commit」を選び、コミットします。

20120428_221404

 ここで、プロジェクトに含まれるファイルの一覧と、ファイルの差分が表示されます。ファイル一覧のファイル名の左側にチェックマークがあるので、実際にコミットするファイルを選択することができます。 Workspace Settings、User Dataというファイル・フォルダがあり、その横に?マークがついています。これらは、バージョン管理する必要が無いファイルなので、そのままにしておきます。
 ファイルを選択すると、中央に現在のファイルの中身が、右側に最後にコミットした(今回の場合はXcodeで新規プロジェクトを作った直後の状態)ファイルの中身が表示されています。
 下の方に「Enter commit message here」と書かれているエリアがあるので、ここにコミットメッセージを入力し、Commitをクリックします。

20120428_221439

 コミットが完了すると、各ファイルの右側にあったMマーク、Aマークが消えています。これで最新の状態になりました。

| | コメント (0) | トラックバック (0)

2012/02/13

プログラミングの勉強

 さて、最近プログラミングの勉強を始めました。
 最初はYour First Mac Appのチュートリアル。
 テキストボックス、スライダー、ボタンがあるビューと、AppDelegate、モデルによる簡単なアプリケーションです。
 テキストボックスとスライダーのIBActionを同じメソッドに繋げるというのが斬新でしたが、それ以外は今までの知識で追いつける範囲でした。

 続いて、Cocoa GUIアプリケーションというチュートリアル。こちらでは、Xcode3でのチュートリアル。私の環境はXcode4ですが、まずまず順調に進みました。
 Xcodeのバージョンによる問題は発生しませんでしたが、テーブルビューが出てきたところから私の知識の不足が露呈してきました。いろいろツールを作るとなるとテーブルビューは重要ですから、ここは復習の必要がありますね。
 このチュートリアルでは、プログラム本体だけでなく、多言語化やアイコンなどの設定方法も出てくるので、困ったときはこのチュートリアルに戻ることにします。

 そして、現在取り組んいるのが、Repeating Motif Wonderlandです。まだ一番最初の、ココアアプリケーションの第1のプロジェクトの途中なのですが、すでに大変です。Xcodeのバージョンの違いによる組み立て方(従来はInterface builderからサブクラスを作るのが主流だったけれども、いつの間にかXcodeで作ってInterface builder(現在は統合済み)で接続)もそうなんですが、バインディングが分かりません。モデル・ビュー・コントロールの独立性を高めるのが狙いなのでしょうが、あまりにも独立しすぎていていまいちつながりが分かりません。精進せねば。
 それと、現在ARCを使用しつつこのチュートリアルに取り組んでいるのですが、実行できたり出来なかったり、ベジェラインが表示がされたりされなかったりと、ずいぶん不安定です。ARCによって何か変わったのか、XcodeやOSのバージョンの違いによるものか、もちろん、私の入力ミス・理解ミスのよるものなのかと、いろいろ原因がありそうで、本来はそれをちゃんと突き止めるべきなのですが、いまはチュートリアル全体をなぞるのに精一杯です。

 はたして、チュートリアルも満足にクリアできず、自作のプログラムなぞできるのでしょうか?

| | コメント (0) | トラックバック (0)

2012/02/07

SyntaxHighlighter導入

 私はココログに記事を書く際、ブログエディタなるものは使わず、ウェブブラウザから直接文章を書いています。ココログの入力画面では、改行するとbrタグがバックグランドで挿入されます。
 しかし、ソースコードを書こうとpreタグなどを使うと、このバックグランドで挿入されるbrタグのためにとても間延びした表示になってしまいます。
 ココログではCSSを定義することができるので、それを使ってきれいに表示できるようにすればいいのですが、やはり、先人の技術で使えるものは使っておきましょう。
 ということで、導入しましたSyntaxHiglighter。これで、ソースコードが本文と明確に分けて表示できます。
 SyntaxHiglighterは、各種プログラミング言語の予約語などの色つけもしてくれるのですが、残念ながらObjective-Cには対応していないようです。そのため、このブログではC++の予約語だけ色つけするように指定していますが、それでもコメントは色が異なるなど、読みやすくはなっています。
 あとは、どんどんプログラムを書くだけ・・・・なんですけどねぇ。

| | コメント (0) | トラックバック (0)

2012/02/06

Xcode ARC時代のマイルール

 私がMacでプログラミングをしていた時代は Objective-C 1.0の時代。@propertyもガベージコレクションもARCもありませんでした。
 久しぶりにXcodeに取り組むと、いろいろ違いますね。
 そんなわけで、自分なりの覚書。

Objective-C 1.0時代のクラス定義
@interface MyClass : NSObject
{
    NSString *string;    // インスタンス変数
}
- (NSString *)string;    // ゲッターの宣言
- (void)setString:(NSString *)aString;    // セッターの宣言
@end

@implementation MyClass
- (NSString *)string     // ゲッターの実装
{
    return string;
}
- (void)setString:(NSString *)aString;    // セッターの実装
    if (string != aString) {
        [string release];
        string = [aString retain];
    }
}
@end
Objective-C 2.0時代のクラス定義
@interface MyClass : NSObject
{
     // インスタンス変数の宣言は不要に(括弧も省略可だが、一応書いておく)
}
@property (retain) NSString *string;    // セッター・ゲッターの宣言は1行に
@end

@implementation MyClass
@synthesize string = _string;    // セッター・ゲッターの実装も1行に
@end
ARC時代のクラス定義
@interface MyClass : NSObject    // 括弧は原則不要
@property (retain) NSString *string;    // セッター・ゲッターの宣言は1行に
@end

@implementation MyClass
{
    // 実装ファイルの中にインスタンス変数を宣言することができる
}
@synthesize string = _string;
@end

 という感じですかね。
 一つのプロジェクトの中に、いろいろな記法が混在することはよくありません。そこで、今後作るプロジェクトはこのような形にしようと思います。

ヘッダファイル(@interface部)には、プロパティとpublicなメソッドのみ記述する。
ヘッダファイルは他のファイルに読み込んだりして使うので、プロパティとpublicなメソッドのみ記載し、{}は記載しないようにします。
@synthesizeでセッター・ゲッターを作成する。
セッター・ゲッターはできるだけシンプルにした方が良いので、@synthesizeで実装します。
プロパティアクセスにはドット構文を使う。
ドット構文は、メモリ管理も引き受けてくれるので、ドット構文を積極的に利用します。ただし、init系メソッドの中では、インスタンス変数を直接アクセスします。これは、セッター内で他のインスタンス変数相互関係がある場合のトラブルを避けるためです。
@synthesizeでインスタンス変数を定義します。
メソッド内でドット構文(self.〜)を付け忘れ、直接インスタンス変数にアクセスすることを避けます。また、インスタンス変数名は、プロパティ名の前にアンダースコア(_)をつけたものにします。これは、IBOutletをつないだときに自動生成されるインスタンス変数名と同じです。
プロパティ以外のインスタンス変数は実装ファイル(@implementation部)に記述

 いろいろ例外が出てくるでしょうが、ひとまずこんな感じで。

| | コメント (1) | トラックバック (0)

2012/01/21

Your First Mac App

 久しぶりにXcodeを楽しもうと思ったので、Your First Mac Appを試してみました。
 これは、アプリケーションを作るためのチュートリアルです。すべて英語なのでよくわかりませんが、実際にXcodeに入力する部分は普段隠れている部分にまとめられているので、とりあえず触ってみる分には問題なさそうです。

 しかし、ARCのおかげか、入力するコードが少ないですね。これからプログラムするなら、やはりARC必須でしょうか(ただし、Mac OS X 10.7 Lion以降しか使えなくなりますが)。

 あと、ちょっと気になったのですが、一度Xcodeからプログラムを起動/終了し、再度起動すると、前回起動したウィンドウの大きさで実行されます。何か入力ミスをしているのか、あるいはLionのウィンドウサイズを覚えてくれる機能が働いているのか・・・もう一度見直してみます。

| | コメント (0) | トラックバック (0)

2012/01/16

いま再びのプログラミング

 わたしがMacでプログラミングをしていたのは、まだobjective-C 1.0の時代です。
 昨日、久しぶりにXcodeを立ち上げて、Apple DeveloperサイトにあるMy First Mac Appというチュートリアルをやってみました。
 いやぁ、プロパティやARCなど、いろいろ変わってしまってよく分かりません(笑)。一応情報だけは追いかけていたつもりなんですけどね。

 ネットをさまようと、多くの方がXcodeの入門書的なブログ・サイトを作ってくれているのですが、はたしてどの機能がどのバージョンに対応しているのやら。

 少しずつリハビリしていきます。

| | コメント (0) | トラックバック (0)

2011/06/15

Bitnami Redmineを自動起動する

 Bitnami Redmineは、/Application/redmine-1.1.3-0/ctlscript.shを起動しないと使えないのですが、どうせなら電源を入れたら使えるようにしたいですね。
 というわけで、自動起動スクリプトを作ります。
 Mac OS Xでは、Launchdというシステムで自動起動させるらしいので、それを作ります。

 まず、/Library/LaunchDaemonsフォルダに、ファイルを作ります。今回は、jp.redmine.plistというファイル名でファイルを作りました。
 中身は、


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>jp.redmine</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/redmine-1.1.3-0/ctlscript.sh</string>
<string>start</string>
<string>redmine</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>

という感じです。AppleのXML plistファイルですね。
 Labelにjp.redmineを指定していますが、ここは何でも良いです。ただ、最初に作ったファイル名から.plistを抜いたものが良さそうです。
 ProgramArgumentsには、redmineの起動ファイル名、引数を指定しています。
 最後に、KeepAliveにtrueを指定しておけば完成です。

 そして、ファイルの所有権を変更しておきます。コマンドラインから

chown root:wheel jp.redmine.plist

と入力します。

 これで、再起動してもredmineが起動するようになります。


| | コメント (0) | トラックバック (0)