Amarronの日記

iOSやMac、Web系の記事を書きます。

iOS の アプリ内課金(In-App Purchase) 組込方法

概要

iPhone」や「iPad」でのアプリ内課金(In-App Purchase)の実装方法について書きました。
iOSアプリ内で特定の機能を有料販売するための準備・開発・テストの説明中心です。
全体的な作業時間としては、1日は覚悟したほうが良さそうです。
(課金のタイプによってはサーバー側の開発がないから、APNsよりは少し楽かも??)

開発環境

OS : OS X 10.9.2
Xcode : 5.1.1

前提条件

プロダクト(次の2つ)が作成されていること。

  • iOS Developer Centerでアプリの登録(Identifiersの登録時に「In-App Purchase」にチェックする(デフォでチェック入ってる))
  • iTunes Connectでアプリを作成(ステータスをPrepare for Uploadまで進める)

作成方法はこちら(アプリの登録(1.証明書関連の作成)、アプリを作成(3. 配布したいアプリの設定))

アプリ内課金の種類

全部で5種類。
消費型はゲームの課金でよく使われます。購読型は電子書籍でよく使われます。
今回は、「非消耗型(Non-consumable)プロダクト」で作成します。

名称 説明 備考
消耗型(Consumable)プロダクト アプリケーションの実行に伴って消費されていく項目です。Voice over IPアプリケーションで通信できる残り分数や、音声の転送など一度限りのサービスが例として挙げられます。 消費アイテム
非消耗型(Non-consumable)プロダクト ユーザのすべてのデバイス上で無制限に使用できる項目です。ユーザのすべてのデバイスで使用可能になります。例としては、書籍やゲームレベルなどのコンテンツ、およびアプリケーションの追加機能などがあります。 無制限アイテム
自動更新購読(Auto-renewable subscriptions) エピソードで構成されるコンテンツです。消耗型プロダクトと同様に、自動更新購読は、ユーザのすべてのデバイスで無制限に利用可能になります。非消耗型プロダクトと異なるのは、自動更新購読には期限があるという点です。新しいコンテンツは定期的に信され、ユーザは購読が有効な期間中、発行されたコンテンツに対してアクセスできます。自動更新購読の期限が近づいてくると、ユーザに代わってシステムにより購読が自動的に更新されます。 期間で自動課金
非更新購読(Non-renewable subscriptions) エピソードで構成されるコンテンツを含まない購読です。たとえば、歴史的な写真のデータベースに対するアクセス権や、フライトマップのコレクションなどがあります。ユーザのすべてのデバイスで購読を使用可能にし、ユーザの購入を復元するは、アプリケーション側で対応することになります。このプロダクトタイプは、ユーザのアカウントが既にサーバ上に存在し、このアカウントを使用してコンテンツの復元時にユーザを識別できる場合によく使用されます。購読の期限と期間もアプリケーション(またはサーバ)で実装し、実行することになります。 期間で課金(開発者が期間や期限をサーバーで管理)
無料購読(Free subscriptions) Newsstandに無料購読のコンテンツを置くための手段です。サインアップしたユーザは、Apple IDに関連付けられたどのデバイスからでも購読できます。期限切れになることはありません。また、購読にはNewsstand対応アプリケーションが必要です。 無料、Newsstand対応アプリケーション

流れ

  1. 準備
    1-1. iTunes ConnectでManage In-App Purchasesの追加
    1-2. StoreKitフレームワーク追加
    1-3. In-App PurchaseをON
  2. 開発
    2-1. チェック処理
    2-2. 購入開始処理
    2-3. トランザクション処理・リストア処理
    2-4. 購入終了処理
  3. テスト

1. 準備

iTunes Connectの設定やプロジェクトにフレームワークや設定の変更を行います。

1-1. iTunes ConnectでManage In-App Purchasesの追加

iTunes Connectに接続し対象のアプリを開き、アプリ内課金のアイテム情報(Manage In-App Purchases)を登録します。(登録内容は「2. 開発」で利用します。)
「Type」は、今回は「Non-consumable」を選択します。

f:id:Amarron:20140523212449p:plain

「Reference Name」は、アイテムの表示名を設定します。(Appleから毎月送信される売上レポートで表示名)
「Product ID」は、一意のグローバル識別子でドメイン名のスタイルを逆にして使用することを推奨しています(例: com.companyname.application.productid)。
「Screenshot」は、購入確認画面のスクリーンショットをアップロードします。(3. テスト実施時にスクリーンショットをキャプチャしアップロードしましょう。)

f:id:Amarron:20140523212507p:plain

1-2. StoreKitフレームワーク追加

ライブラリに「StoreKit.framework」を追加します。
(TAGETS > Build Phases > Link Binary With Libraries)

1-3. In-App PurchaseをON

CapabilitiesのIn-App PurchaseをOFFからONに変更します。 (PROJECT > Capabilities > In-App Purchase)

f:id:Amarron:20140523212521p:plain

2. 開発

アプリ内課金のプログラム。
参考URL:失敗しない iOS In-App Purchase プログラミング
サンプルコード:SampleInAppPurchaseswift

2-1. チェック処理

課金イベントにアプリ内課金が使えるかチェックをします。

MyClass.h

 #import <StoreKit/StoreKit.h>

// delegateにSKProductsRequestDelegateとSKPaymentTransactionObserverを追加
@interface MyClass : UIViewController <SKProductsRequestDelegate, 
                                            SKPaymentTransactionObserver> {
}

MyClass.m

// メソッド名は適当に
- (BOOL)_checkInAppPurchase
{
    if (![SKPaymentQueue canMakePayments]) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"エラー"
                                                        message:@"アプリ内課金が制限されています。"
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"OK", nil];
        [alert show];
        return NO;
    }
    return YES;
}

2-2. 購入開始処理

アイテム情報の取得と購入開始の処理を行います。

MyClass.m

// メソッド名は適当に(チェック処理の結果がYESだったらこの処理を呼ぶ)
- (void)_startInAppPurchase
{
    // com.companyname.application.productidは、「1-1. iTunes ConnectでManage In-App Purchasesの追加」で作成したProduct IDを設定します。
    NSSet *set = [NSSet setWithObjects:@"com.companyname.application.productid", nil];
    SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:set];
    productsRequest.delegate = self;
    [productsRequest start];
}

 #pragma mark SKProductsRequestDelegate
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
  // 無効なアイテムがないかチェック
  if ([response.invalidProductIdentifiers count] > 0) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"エラー"
                                                        message:@"アイテムIDが不正です。"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil, nil];
    [alert show];
    return;
  }
  // 購入処理開始(「iTunes Storeにサインイン」ポップアップが表示)
  [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
  for (SKProduct *product in response.products) {
    SKPayment *payment = [SKPayment paymentWithProduct:product];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
  }
}

2-3. トランザクション処理・リストア処理

App Storeトランザクションを処理するのを待機し、購入が成功した場合アイテム購入の処理を行います。

MyClass.m

// トランザクション処理
#pragma mark SKPaymentTransactionObserver
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchasing:
                // NSLog(@"購入処理中");
                // TODO: インジケータなど回して頑張ってる感を出す。
                break;
            case SKPaymentTransactionStatePurchased:
                // NSLog(@"購入成功");
                // TODO: アイテム購入した処理(アップグレード版の機能制限解除処理等)
                // TODO: 購入の持続的な記録
                [queue finishTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                // NSLog(@"購入失敗: %@, %@", transaction.transactionIdentifier, transaction.error);
                // TODO: 失敗のアラート表示等
                break;
            case SKPaymentTransactionStateRestored:
                // リストア処理
                // NSLog(@"以前に購入した機能を復元");
                [queue finishTransaction:transaction];
                // TODO: アイテム購入した処理(アップグレード版の機能制限解除処理等)
                break;
            default:
                [queue finishTransaction:transaction];
                break;
        }
    }
}

// リストア処理結果
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
{
    // NSLog(@"リストア失敗:%@", error);
    // TODO: 失敗のアラート表示等
}

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
    // NSLog(@"全てのリストア完了");
    // TODO: 完了のアラート表示等
}

購入の持続的な記録には次の方法があります。(消費型プロダクトは維持しません。)

  • Appレシートを使用した持続(iOS 7以降の非消耗型プロダクトと自動更新購読で推奨)
  • User DefaultsまたはiCloudを使用した値の持続
// User Defaultsを使用した値の持続の例)
MyClass.m

// 購入の持続的な記録
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL rocketCarEnabled = [defaults boolForKey:@"enable_rocket_car"];

// 購入アイテム使用時
if (rocketCarEnabled) {
 // ロケットカーを使用
} else {
 // 普通の自動車を使用
}

非消耗型プロダクトはAppレシートが推奨ですが、余力がなかったので記述は割愛します。

2-4. 購入終了処理

トランザクションオブザーバの削除を行います。(トランザクションが終了すると呼び出される)

MyClass.m
#pragma mark SKPaymentQueue
- (void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions
{
    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
}

3. テスト

テストユーザーの作成と実機で確認します。
参考URL:iPad上でアプリ内課金 (In-App Purchase) の実機テストをする方法メモ

  1. iTunes Connectでテストユーザを作成します。(10 Minute Mailを使うと10分だけ無料でメアドが貰えるので便利かも)
  2. 実機の端末App IDをサインアウトし、アプリをインストールします。
  3. 追加した課金のシステムをテストします。テスト実施(課金イベント)時にサインインを求められるので、テストユーザーでサインインします。
  4. 課金成功のメッセージが表示されれば、無事課金完了です。

テスト実施時の注意事項
参考URL: iOSのアプリ内課金(In App Purchase)での注意点

  • テスト用のiTunesアカウントで事前にサインインしない
  • Appleサーバーに対してレシートの有効性を確認する場合には本番用URL -> サンドボックスURLの順で検証する

以上でアプリ内課金(In-App Purchase)の組込作業は終わりです。
お疲れ様でした!

.DS_Store とは

背景

以前書いた記事が自分の思わぬところで多くの人に見ていただけたので、もう少し「.DS_Store」について書きたいと思います。

「.DS_Store」ってなんとなく設定ファイルだと思っていたのですが、そもそもなんだっけ・・・
ということで「.DS_Store」について少し調べました。
過不足や誤記があればご連絡いただけると助かります。

  1. .DS_Storeとは
  2. コマンド(defaults write com.apple.desktopservices DSDontWriteNetworkStores true)を利用した場合の影響について
  3. コマンドを利用した場合の個人的な不具合体験談等

1. .DS_Storeとは

概要

 OS Xで作成された独自の形式の隠しファイルです。
アイコンの位置や表示設定などのフォルダ表示オプションに関するメタデータを保持しています。
デフォルトでFinder上でもリモートシステム上でもアクセスするすべてのフォルダに.DS_Storeファイルが作成されます。
 Apple側でも問題意識を持っていて、ネットワーク接続時に .DS_Store ファイルの作成を抑制する方法も紹介しています。(defaults write com.apple.desktopservices DSDontWriteNetworkStores trueコマンドの紹介)

作成されることによる問題点

  • Macユーザー以外から苦情
  • リビジョン管理時のファイル追加による負担
  • アーカイブ構造が重要である場合の余計なファイルによる構造的問題

wiki .DS_Storeより抜粋

2. コマンド(defaults write com.apple.desktopservices DSDontWriteNetworkStores true)を利用した場合の影響について

影響範囲

SMB/CIFS、AFP、NFSWebDAV サーバ
(USB、DropBox等はコマンドを実行しても作成されます。)

影響内容

Finderで予期しない動作が起こることがあります。
一例として、サーバボリューム上の項目の「情報を見る」のコメントを追加したり編集する場合、変更内容は他のクライアントやサーバ自体からは見えません。(ファイル本体ではなくメタデータに影響あり)
Mac OS X: リモートボリュームの「情報を見る」のコメントは表示されないことがあります

削除方法は色々なサイトに乗ってますが、.DS_Storeの説明や影響の記事が少なくて不安になる。。。

3. コマンドを利用した場合の個人的な不具合体験談等

 ファイルサーバ上の大きめのサイズのExcelが開けない場合がありました。
ローカルにコピーして、サーバのファイルに上書きして更新は出来ます。
自分以外の人が更新する場合ファイルがデグレードする場合があるので注意が必要です。
私のファイルサーバ上のExcel更新頻度は、週に2〜3回位なので不具合が余りなかったのかもしれません。

 私は、これからも.DS_Storeを作成しない方を選びます。
理由は、現在Excelを更新する業務は少ないし、会社の方針もGoogleDriveに移行していく予定なので今後も更新頻度は少なくなるからです。Macに変更した当初はExcelのマクロが使えない事に絶望を覚えましたが気にしないことにしました。
それ以上に、私の会社ではMacユーザーが少ない(1〜2人)ので何を見たのかが他の人に筒抜けの生活なんてもう耐えられないのです!
ファイルサーバ上で頻繁にファイルを変更するようなお仕事をされている方や重要なファイルを扱うような方は、事故を起こす可能性があるのでコマンドは利用せずにそのまま利用するのが良いのかもしれません。

Linux 基礎

概要

Linux(CeontOS)について昔まとめた資料です。
基礎なので、入門者や初心者向きです。

目次

  1. Linuxの基礎知識
  2. Linuxの基本操作
  3. ファイルとディレクトリ
  4. シェルとコマンド操作
  5. ネットワーク
  6. ユーザー管理
  7. ソフトウェアのインストール
  8. システム管理
  9. Webサーバー

1.Linuxの基礎知識

Linuxとは

1991年にフィンランドの大学生だったリーナス・トーバルスが作成。 その後開発者が改良を加え実用的なOSへと進化していく。

LinuxとはOSの一種で、厳密にはカーネルのみがLinuxカーネルとは、OSの中核部分の事でカーネルにプログラムの実行ライブラリや、日常的に使うツール、コマンド、グラフィカルなユーザーインターフェースを追加してOSとして使えるようになる。

ディストリビューション

カーネルに様々なソフトウェアをまとめたのがディストリビューション。 (多数のオープンソフトウェアや商用ソフトウェアを組み合わせ、1つのOS製品としてまとめあげたもの)

  • サーバーソフトウェア:webサーバー、メールサーバー、DNSサーバー、ファイルサーバー
  • クライアントソフト:オフィスソフト、ブラウザ
  • GUIX Windows System、ウィンドウマネージャー
  • シェル、コマンド、ライブラリ
  • Linuxカーネル

ディストリビューションの代表的な系統は3つ

系統 ディストリビューション 代表的パッケージ
Red Hat Fedora,Red Hat Enterprise Linux,CentOS RPM
Debian Debian GNU/Linux,Ubuntu,Linux Mint,Edubuntu Debian
その他 Slackware,opemSUSE,SUSE Linux Enterprise,Tiny Core Linux

※パッケージについては、7.ソフトウェアのインストールを参照

2.Linuxの基本操作

ユーザー

大きく分けて3つのユーザーがある

  • 管理ユーザ:システムの変更や実行、再起動など管理権限を持つ(root)(#で表記される)
  • システムユーザー:システムプログラムを実行するための専用アカウント(apache,DB等サービスのアカウント)
  • 一般ユーザー:作業用アカウント、通常は一般ユーザーでログインして他ではログインしない($で表記される)

※詳しくは6.ユーザー管理参照

コマンド

コマンドの正体はプログラム・ファイル。 シェル自身にもコマンドをもいくつかのコマンドをもっている。(内部コマンド、調べるにはtypeコマンドで内部コマンドか判断出来る。)

コマンド [オプション] [引数]

  • ファイル操作系コマンド
概要 コマンド 備考
ファイルの種類確認 file [ファイル名]
最初の1画面だけ表示される less [ファイル名]
所有者変更 chown [-R] [所有者] [ファイル名] ルート権限、Rオプションを変更すると配下のファイルも全て変更される
所有グループ変更 chgrp [-R] [所グループ] [ファイル名] ルート権限、Rオプションを変更すると配下のファイルも全て変更される
所有者所有グループ変更 chown [-R] [所有者:所有グループ] [ファイル名] ルート権限、Rオプションを変更すると配下のファイルも全て変更される
ファイルを探す find [ディレクトリ] [オプション] 例) find ~/ -name "hogehoge.txt"
ファイルの末尾を表示 tail [オプション] 例) tail -n 3 "hogehoge.txt"(下から3行)
tail -f "hogehoge.txt"(監視し常に最新を表示する)
  • その他
概要 コマンド 備考
使用中のシェルの確認 ps
ネットワークの再起動 /etc/init.d/network restart

変数・エイリアス

  • 変数

変数名=値
(変数に値を設定)
echo $変数名
(変数の値を確認)

  • 環境変数(定義したシェル上に加え、子シェルも変数が参照できる)

export 変数名
環境変数に設定)
printenv
環境変数の閲覧)

alias [エイリアス='コマンド [オプション 引数]']
エイリアスの設定)
unalias エイリアス
エイリアスの削除)

chkconfig サービス名 [on|off]

3.ファイルとディレクトリ

ファイルの種類

表記 概要 備考
- 通常ファイル テキストファイルとバイナリファイルがある
d ディレクトリ
l リンクファイル
b 特殊ファイル(ブロックデバイスファイル) 接続されているハードウェアも全てファイルとして抽象化して扱う。例えば、プリンターを表すデバイスファイルに文字列を書き込むとプリンターが印刷されて出力されたり
c 特殊ファイル(キャラクタデバイス) 接続されているハードウェアも全てファイルとして抽象化して扱う。例えば、プリンターを表すデバイスファイルに文字列を書き込むとプリンターが印刷されて出力されたり
lsでの例
-rw-rw-r--  1 vagrant vagrant  151  6月 30 15:26 2013 test.html
  ①   ②   ③    ④   ⑤      ⑥       ⑦
①ファイルモード(一番左はファイルの種類)
②リンク数
③ファイルの所有者
④ファイルの所有グループ
⑤ファイルサイズ
⑥最終更新日
⑦ファイル名

ファイルシステム(ディスクファイルシステム)

ファイルを保存する物理的な装置には、ハードディスク、SSDUSBメモリ、ネットワークドライブ等様々ものがある。 それらに記録されたファイルを管理する仕組みをファイルシステムという。 主なファイルシステムは次の通り。

  • ext4Linuxの標準で使われる
  • XFS:LinuxUNIXで使われる(堅牢性の高い)
  • FAT/VFAT:SDカードで使われる
  • NTFS:Windowsで使われる
  • ISO9600:CD-ROMで使われる
  • UDF:DVDで使われる

ディレクトリ構成

/ 概要
bin 一般ユーザーが実行できる基本的なコマンド
boot システムの起動に必要なファイル
dev デバイスファイル
etc システム設定ファイル
home ユーザーのホームディレクトリ
lib ライブラリ
lost+foumd 破損した
media DVDなどをマウントする場所
proc プロセス情報
root rootユーザー用ホームディレクトリ
sbin rootユーザーが実行できるシステム管理コマンド
tmp 一時的なファイル置き場
usr 各種プログラムやライブラリ、ドキュメント等
var ログファイル等更新されるファイル類

4.シェルとコマンド操作

シェル

コマンドを通してLinuxを利用する際に、ユーザーとLinuxの間を仲介しているプログラムをシェルという。 (ログイン時のデフォルトは/etc/passwdファイルで設定されている)

  • 主なシェル
シェル 概要
sh(Bourne Shell) UNIXの標準シェル。最低限の機能しか持たない
bash(Bourne Again Shell) shを改良して大幅に機能を拡張したシェル
tsh(TENEX C Shell) csh(C言語によく似た文法を使えるシェル)を拡張したシェル
ksh(Korn Shell) shを改良して大幅に機能を拡張したシェル
zsh(Z Shell) ksh,bash,tcshのいいところ取りをしたような高機能シェル
  • bashの主な内部コマンド
コマンド 概要 備考
alias エイリアスの作成
unalias エイリアスの解除
cd カレントディレクトリの変更
pwd カレントディレクトのパスを表示
echo 引数を表示
export 環境変数を設定
history コマンド履歴を表示 「!履歴番号」でその履歴のコマンドが実行される
kill プロセスにシグナルを送る 詳しくは8.システム管理参照
exit シェルの終了
  • bashの主なキー操作
コマンド 概要
[Ctrl]+[A] カーソルを行の先頭へ移動
[Ctrl]+[E] カーソルを行の末尾へ移動
[Ctrl]+[D] カーソル部分を1文字削除
[Ctrl]+[H] カーソルの左側を1文字削除
[Ctrl]+[L] 画面をクリア
[Ctrl]+[S] 画面への出力を停止
[Ctrl]+[Q] 画面への出力を再開
[Ctrl]+[C] 実行中のコマンドを中断

コマンドの入出力

入出力は次の3つ

  • 標準入力(入力元はキーボード)
  • 標準出力(出力先は端末画面)
  • 標準エラー出力(出力先は端末画面)

リダイレクト

「コマンド > ファイル名」 入力元をキーボードからファイルへと切り替えたり、出力を端末画面からファイルに切り替えたりすることが出来る。 リダイレクトを使うと標準出力を任意のファイルに切り替える事ができる。

例) cal > calendar.txt (画面には実行結果が表示されずファイルへ実行結果が出力される) (「コマンド >> ファイル名」だと上書きではなく追記される) (「コマンド 2> ファイル名」だと標準エラーのみファイルに出力される)

myprog < data1
(自作プログラムmyprogに、ファイルdata1からデータを入力する)

パイプ

「コマンド1 | コマンド2」 あるコマンドの実行結果を、別のコマンドで処理出来る。

バックグラウンド実行

「コマンド &」 コマンドを実行しながら端末の操作が出来る

オンラインマニュアル

man [セクション番号] [コマンド名またはファイル名]

ヘルプより詳しい使い方が出力される。 オンラインといってもシステムにインストールされているのでネットワーク経由でどこかに見に行くわけではない。 (一般的に、/usr/share/man配下に格納されている) マニュアルはいくつかのカテゴリーに分類されていて、それをセクション(章)という。

セクション 概要
1 誰でも実行できる一般ユーザーコマンド
2 システムコールカーネルの関数)
3 ライブラリの関数
4 デバイスファイル
5 ファイルの書式
6 ゲーム
7 その他
8 システム管理コマンド
9 Linux独自のカーネルルーチン用ドキュメント

5.ネットワーク

ネットワークコマンド

  • ifconfig

ifconfig

コマンドの主な出力

項目 概要
HWaddr MACアドレス
inet addr IPアドレスIPV4
Bcast ブロードキャストマスク
Mask サブネットマスク
inet6 addr IPアドレス

ping [オプション] ホスト

ICMPパケットを送信し続けその結果を表示する。 反応が返ってくれば少なくともネットワークが繋がっていて接続先ホストも起動しているということが確認出来る。 (ICMP(Internet Control Message Protocol)とは、エラーメッセージや制御メッセージを伝えるためのプロトコル

netstat [オプション]

送信先や送信元のアプリケーションを区別するために使われる番号がポート番号。 開いているポート番号を確認すれば、ローカルホスト上で動作しているサーバーソフトウェアや、通信中のソフトウェアを確認できる。

主なオプション

オプション 概要
-a すべてのソケット情報を表示
-n アドレスやポートを数字で表示
-t TCPポートだけを表示
-u UDPポートだけを表示

主なポート番号

ポート番号 プロトコル 概要
20,21 FTP FTPサーバー(ファイル転送)
22 SSH SSHサーバー(安全なリモート接続)
23 telnet Telnetサーバー(リモート接続)
25 SMTP メールサーバー
53 DNS DNSサーバー
80 HTTP Webサーバー
110 POP3 メールサーバー
443 HTTPS Webサーバー(SSL

ネットワークの設定

  • 設定ファイル

/etc/sysconfig/network

主な設定項目

設定項目 概要
NETWORKING yesならネットワークサービスをシステム起動時に有効にする
HOSTNAME ホスト名
GATEWAY デフォルトゲートウェイ(ルータ)のIPアドレス
  • ネットワークの再起動コマンド

/etc/init.d/network restart

ファイルダウンロード

  • FTPでダウンロード

lftp 接続ホスト
(ホストに接続)
get ファイル名
(ファイルのダウンロード(mgetだと複数取得出来る))
quit
(lftpを終了)

  • HTTP接続でダウンロード

wget [-R] 接続URL
例) wget -r http://example.com/
-rを付与すると配下のファイルもget出来る

リモート接続

主にリモート接続にはSSH(Secure SHell)が使われます。 SSHクライアント⇔SSHサーバー (通信経路が暗号化されます)

  • SSHコマンド(sshでリモート接続)

ssh [ユーザー名@]接続ホスト

  • SCPコマンド(sshでファイルコピー)

scp [-r] コピー元 コピー先
例)scp sample.txt test.host.jp:/tmp
→sample.txtがホスト(test.host.jp)の/tmp直下にコピーされる

6.ユーザー管理

ユーザー情報

  • ユーザー情報

/etc/passwd
(1ユーザーにつき1行で情報が格納される)

  • パスワード情報

/etc/shadow
(暗号化されたパスワード情報が格納される。rootユーザーのみ閲覧可能)

  • ユーザー切替え

su [ユーザー名]

  • UID(ユーザーに割り当てらた固有の数値)

id [ユーザー名]
uid=500(vagrant) gid=500(vagrant) 所属グループ=500(vagrant),10(wheel)

ユーザーとUIDの対応

ユーザー UID 備考
管理ユーザー 0
システムユーザー 1~99
一般ユーザー 100以上 CentOS等多くのディストリビューションでは500以上のUIDが使われている
  • グループ情報

/etc/group
(ユーザーは最低限1つのグループに所属しなけばいけない。
基本グループはプライマリーグループ、それ以外はサブグループと呼ぶ。
一般的なディストリビューションの場合、ユーザー追加時にユーザーと同じ名前のグループでプライマリーグループが設定される)

  • グループ情報確認

groups [ユーザー名]

ユーザー情報変更

  • ユーザー追加

useradd ユーザー名
(root権限が必要)

  • パスワード変更

passwd [ユーザー名]
(ユーザー名を省略すると自分のパスワード変更が出来る)

  • ユーザ削除

userdel [-r] ユーザー名
(-rオプションを指定すとホームディレクトリも一緒に削除される)

グループ情報変更

  • グルプ追加

groupadd グループ名

  • グループにユーザーを追加

usermod -G グループ名 ユーザー名

  • グループ削除

groupdel グループ名

ユーザー環境変更

ユーザーに関わる情報は、Linuxのシェル上では変数に保存される。

ユーザー環境に関わる主な変数

変数 概要
HOME ユーザーのホームディレクトリ
LANG ユーザーの言語環境
PATH コマンドを検索するディレクトリ
UID ユーザーID
USER ユーザー名

シェルは、ユーザーがログイン時にとくてのファイルを読み込むようになっている。 ユーザー環境を設定したい場合、その設定ファイルの定義を追加すればよい。 具体的には、/etc/profileファイルと~/.bash_profileファイルが読み込まれる。 /etc/profileは全ユーザー共通の設定で、~/.bash_profileはユーザー固有の設定。 (変更を出来るのは~/.bash_profileのみ)

7.ソフトウェアのインストール

パッケージ

パッケージとは、インターネットで配布されているソフトウェアを簡単にインストール出来るようにしたのもの。(ソフトウェアには実行ファイルやマニュアル、ドキュメントファイル、設定ファイル、関連ライブラリ等が含まれており、まとめてパッケージと呼ぶ) 大半のLinuxディストリビューションは、ソフトウェアをパッケージ単位で管理する。

  • RPMパッケージのファイルの見方

emacs-23.1-21.el6_2.3.x86_64.rpm

arch
(32ビット=i386,i586,i686、64ビット=x86_64)

  • 高度なパッケージ管理システム

rpmコマンドだけでは、管理者が手動で依存関係を解決しなければならなく管理が大変。 CentOSではYUMを使ってパッケージ管理が出来る。 YUMを使うとパッケージとその情報が蓄積されたインターネット上のリポジトリを利用し、必要なパッケージをインストールでき、依存関係も自動で解決してくれます。

yum [-y] サブコマンド

主なサブコマンド 概要
update システム(または指定したパッケージ)をアップデート
check-update アップデートされるパッケージ一覧表示
install 指定したパッケージのインストール
remove 指定したパッケージのアンインストール
list パッケージ一覧表示
info 指定したパッケージの情報を表示
serch パッケージを検索

8.システム管理

プロセスとデーモン

  • プロセス
    プログラムを実行すると、メモリが割り当てられCPUによって処理される事をプロセスと呼ぶ。 (Linuxは、複数ユーザーが同時操作する事を前提としておりマルチタスクのOSとして設計されている。同時にプログラムが実行されているように見えるのは、CPUの処理を細切れにしてごく短い時間で切り替えながら処理をしている)

ps [オプション]
(オプションを付けずに実行すると、端末上で実行されているプロセス一覧が表示される)
(オプションにa及びxを付けて実行すると、システム上で実行されているプロセス一覧が表示される(uを付けるとユーザーも表示される)

pstree
(プロセスの親子関係が確認できる)

kill [-[SIG]シグナル] PID
(プロセスにシグナルを送る)

psコマンドの例)
[root@localhost ~]## ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3  19228  1508 ?        Ss   01:03   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S    01:03   0:00 [kthreadd]

psコマンドの主な出力項目

項目 概要
USER 実行ユーザー
PID プロセスID
%CPU CPU利用率
%MEM メモリ利用率
TTY プロセスを実行した端末
STAT プロセスの状態
START プロセスの実行日
TIME 消費したCPU時間
COMMAND コマンドまたはプログラム名
killコマンドの例)
[vagrant@localhost ~]$ kill -TERM 1989

主なシグナル

シグナル シグナル番号 概要
HUP 1 ハングアップ(設定ファイルを再読み込みさせたいとき使う)
KILL 9 強制終了
TERM 15 通常終了
CONT 18 一時停止中のプロセス再開
STOP 19 一時停止
  • デーモン
    メモリに常駐しているプロセスをデーモンと呼ぶ。 一般的なデーモン起動を起動するサービスは/etc/init.d/に格納されている。
    (プロセスには、処理が終了すると消滅するものと、ずっとメモリ上に常駐し要求に応じてサービスを提供するものがあります。殆どのプロセスは前者で、システムサービスやサーバープログラムは後者となる。)

主な起動スクリプト

起動スクリプト 説明
/etc/init.d/network ネットワークサービス
/etc/init.d/crond 定期的な処置をするcronサービス
/etc/init.d/cups 印刷サービス
/etc/init.d/rsyslog シスログサービス
/etc/init.d/sshd SSHサーバー
/etc/init.d/postfix Postfixサーバー
/etc/init.d/httpd Apachサーバー

システム状況監視

topコマンドの例)
[vagrant@localhost ~]$ top

①top - 05:38:52 up  4:34,  1 user,  load average: 0.00, 0.00, 0.00
②Tasks: 111 total,   1 running, 110 sleeping,   0 stopped,   0 zombie
③Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
④Mem:    379532k total,   176224k used,   203308k free,    14520k buffers
⑤Swap:   786424k total,        0k used,   786424k free,    86204k cached

⑥  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                
    1 root      20   0 19228 1508 1216 S  0.0  0.4   0:00.89 init  

①top - 05:38:52 up 4:34, 1 user, load average: 0.00, 0.00, 0.00 ロードアベレージは平均的なシステム負荷の値で、一般的にはCPU数(コア数)以下であれば問題なし。(例えば2コアでCPUを2つ搭載しているマシンでは、4.0を下回っていれば、システム負荷は高くない)

② Tasks: 111 total, 1 running, 110 sleeping, 0 stopped, 0 zombie 実行中のプロセス数が表示される

③Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st CPUの負荷状況が表示される

④Mem: 379532k total, 176224k used, 203308k free, 14520k buffers ⑤Swap: 786424k total, 0k used, 786424k free, 86204k cached メモリやスワップについて表示される。(詳しくはfreeコマンド参照)

⑥ PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19228 1508 1216 S 0.0 0.4 0:00.89 init
個々のプロセスが表示される。 CPUやメモリを多く消費しているプロセスを確認すると良い。(CPU利用率=%CPU、メモリ占有率=%MEM)

デスク使用量監視

df [オプション]
ファイルシステムごとのディスク使用量や使用割合、空き容量を確認出来る)
(オプションにHを付けると見やすい単位で表示する)

メモリ監視

free [オプション]
(メモリの利用状況を確認できる)
(オプションにmを付けるとMバイト単位で表示する)

freeコマンドの例)
[vagrant@localhost ~]$ free -m
              total       used       free     shared    buffers     cached
①Mem:           370        172        198          0         14         84
②-/+ buffers/cache:         73        297
③Swap:          767          0        767

// トータル370Mバイトのうち、172Mバイトが使われ、空きが198Mバイト
// しかし、一部バッファキャッシュに利用されているため、実際に使われているのは73Mバイト、空きは297Mバイトとなる。
// メモリに余裕があるためスワップは使用されていない

①Mem: 370 172 198 0 14 84 メモリの状況

②-/+ buffers/cache: 73 297 バッファキャッシュを引いた値 (空きメモリがあるとハードディスクへのアクセスを高速化するため、メモリの一部を利用する。これをバッファキャッシュという。 実際に使われているメモリは、バッファキャッシュの値を差をみる。)

③Swap: 767 0 767 スワップ状況 (メモリが不足すると一時的にディスクの一部を仮想メモリとして利用する。これをスワップという。 スワップが日常的に発生しているならメモリの増設が必要。)

freeコマンドの表示項目

項目 概要
Mem total 前メモリの合計
used 使用中のメモリ
free 空きメモリ
shared 未使用
buffers バッファ
cached キャッシュ
-/+ buffers/cache: used バッファキャッシュ以外に使われているメモリ
free バッファキャッシュを含めた空きメモリ
swap total スワップ領域の合計
used 使用中のスワップ領域
free 空きスワップ領域

ログ管理

/var/log
(システムやサービスプログラムの挙動、ユーザーのログイン状況等がログファイルに記録される)

主なログファイル

/var/log/ 概要
messages システム一般記録
scure 認証関連の記録
maillog メール関連の記録
cron cronによる自動処理の記録
rpmpkgs インストール済みRPMパッケージの記録

また、CentOSにはlogwatchというソフトウェアが用意されており、一日に一度重要な項目をメールにまとめてレポートを送ってくれる。

9.Webサーバー

Apache

Apache Projectによって開発されたWebサーバーソフト。

Apache代表的な機能

  • 静的なWebページの配信
    HTMLと画像のみで構成されたwebページ等
  • 動的なWebページの配信
    掲示板やECサイト等、ユーザーのアクションで表示が変わる
  • モジュール構成
    様々な機能がモジュールとして分割され必要に応じて本体に組み込み利用できる
  • SSl(Secure Socket Layer)
    暗号化された安全な通信の提供
  • ユーザ認証
    ユーザー名とパスワードを使って特定のユーザーのみ公開できる
  • ホスト認証
    特定のホスト名やドメインIPアドレスからのアクセスを拒否することができる
  • バーチャルホスト
    一台のWebサーバーで異なるドメインを持つ複数のWebサイトを運用できる

Apacheの設定

/etc/httpd/conf/httpd.conf
Apacheの設定ファイル)

httpd.confの内容

ディレクティブ 概要 詳細
ServerRoot 設定等のトップディレクトリ Apacheの設定ファイルが格納されているディレクトリを指定
Listen サーバーの待ち受けるポート番号 通常は80番ポートで待ち受けるため変更不要
Include 外部の設定ファイル httpd.conf以外の外部ファイルのサブ設定ファイルを指定
User Apacheの実行ユーザー デフォルトはApacheになっており、作成されたファイルもApache権限で読み取りできるようにする必要がある
Group Apacheの実行グループ
Server Admin サーバー管理者 サーバー管理者のメールアドレス
ServerName サーバー名
DocumentRoot ドキュメントルート webサイトのトップディレクトリ
DiretoryIndex インデックスファイルの指定 URLでファイル指定されなかった時に、インデックスファイルとして返すファイル名を指定

Apacheコマンド

httpd -t
httpd.confの構文チェック。「Syntax OK」と表示されたら構文上はミスはない) /etc/init.d/htppd start
(起動) /etc/init.d/htppd status
(確認) /etc/init.d/htppd stop
(停止)

おすすめ書籍

Linuxを全く分からなくても丁寧にわかりやすく解説されてます。
進み方も調度良く、分かりやすく書いてあるのでかなりオススメ!!

サーバー構築 サービスメモ

概要

サーバー構築サービスの備忘録メモです。

  1. サービスの種類
  2. VPS
  3. まとめ

1. サービスの種類

共有レンタル VPS クラウド(IaaS)※2
タイプ※1 共有 仮想 仮想
価格 0〜低
管理者権限
管理者知識 不要 必須 必須
自由度 ☓(webのみ)
構成変更
※1
共有サーバーは、1台のサーバーを複数のユーザーで共有。(他のユーザーの影響を受けるが専門知識が不要)
(専有サーバーは、1台のサーバーを単独のユーザーで占有。(物理的なサーバを専用しているためメンテナンスやハード障害の影響を受ける))
仮想サーバーは、1台のサーバー内に自分だけの専用領域を確保。(システム設定など) 
※2
* IaaS:インフラ(仮想サーバやネットワーク)
  →AmazonEC2等
* PaaS:プラットフォーム(開発環境やアプリケーションの動作環境)
  →GoogleAppEngine、dotCloud等
* SaaS:アプリケーション
  →Gmail等

参考URL

2. VPS

2-1. メモリ2G前後のVPS

さくら DTI KDDI お名前.com KAGOYA
サービス名 さくらのVPS 2G ServersMan@VPS Standard CloudCore VPS VPS(KVM)メモリ2GB タイプA
初期費用 0円 0円 0円 0円 0円
月額 1,480円 980円 2,100円 1,380円 840円
CPU 2.40Ghz 2.13Ghz 2.20GHz 3.06Ghz 2.53Ghz
メモリ 2GB 最大4GB 2GB 2GB 最大2GB
HDD 200GB 100GB 100GB 200GB 200GB
ネットワーク 100Mbps共有 不明 100Mbps共有 100Mbps共有 不明
仮想化プラットフォーム KVM OpenVZ KVM KVM OpenVZ
対応OS CentOS 5(32/64)
CentOS 6(32/64)
Scientfic Linux6(32/64)
Ubuntu 10.04(32/64)
FreeBSD 8.1(32/64)
Debian 6(32/64)
Fedora 16(32/64)
CentOS 5(32/64)
CentOS 6(32/64)
Ubuntu 10.04(32/64)
Debian 5(32/64)
Debian 6(32/64)
CentOS 5
不明
CentOS 6 (64)
Scientfic Linux
Fedora
Debian
Ubuntu
FreeBSD
Arch Linux
CentOS 5(32/64)
Ubuntu 10.04(32/64)
Debian 5(32/64)

SaaSesは2014年4月1日より法人向けクラウドに移行したようです。
参考URL:http://temog.info/archives/vps/vps-comparison-sakura-dti-saases-kddi-gmo-kagoya.html

2-2. 月額500円以下のVPS

DTI ServerQueen ABLENET
初期費用 0円 0円 980円
月額 490円 480円(1年契約) 480円
メモリ 1GB 256MB 1GB
HDD 50GB 10GB 50GB

ServerQueenは、この価格での新規提供終了したようです。
月額500円以下のプランがあるVPSまとめ

2-3. 無料のVPS

VPS.me Host1Free
CPU 0.6G ?
メモリ 384MB 128MB
Disk space 5GB 10GB
備考 空きがない場合があり最後まで登録しないと空き状況がわからない(参考URL:http://yokoswork.blogspot.jp/2014/01/vps-vpsme.html 登録や設定に癖があり、ミスすると消される

3. まとめ

個人的には、DTIの490円がオススメ!
レンタルサーバーだと、管理権限がなくて自由度が低い。クラウドだと遊びや勉強で使うには料金が高い。
無料のVPSだと空き状況や登録が厄介だし、何よりサーバーに詳しくないから英語が厳しい。

CocoaPods インストール 使い方 メモ

cocoapodsのインストールと使い方のメモです。

cocoapods概要:Mac アプリや iOS アプリ開発者向けのライブラリ管理ツール
実行環境   :OS X バージョン10.9
前提条件   :「Ruby」「Command Line Tools」がインストールされていること (MacOSはデフォでRubyが入っていると思います。)
「Command Line Tools」のインストール方法やcocoapodsの詳しい参考URL:http://www.iosjp.com/dev/archives/451

流れ

  1. インストール
  2. 使い方
  3. その他

1. インストール

次のコマンドを実行でOK

$sudo gem install cocoapods

2. 使い方

2-1. Podfileファイルを作成
2-2. ライブラリのインストール
2-3. Xcodeで実行

2-1. Podfileファイルを作成

作成したプロジェクトの「hogehoge.xcodeproj」と同じディレクトリに「Podfile」というファイルを作成します。
「Podfile」ファイルに、プラットフォーム(iOSのバージョン等)と追加したいライブラリ情報を記入します。

「Podfile」ファイルの例↓(1行目:プラットフォームがiOS7.1、2行目:iRateのライブラリ追加)

platform :ios, '7.1'
pod 'iRate'

※ライブラリー名は、CocoaPodsホームページで検索できます。

2-2. ライブラリのインストール

次のコマンドを実行でOK

$ pod install

Xcodeは閉じて実行しましょう。

2-3. Xcodeで実行

「xcodeproj 」ファイルではなく、「xcwordspace」ファイルで開きます。
(クラスをimportして使えるようになっています。)

3. その他

CocoaPodsのバージョンアップ

次のコマンドを実行でOK(コマンドはインストールと同じ)

$ sudo gem install cocoapods

メモ:ライブラリをインストールする時に次のようなエラーになる時に良く使います。

[!] The `master` repo requires CocoaPods 0.32.1 -

参考URL:http://qiita.com/snow_richisland/items/90132544d482a4668b7c

RSS1.0,RSS2.0,ATOM のフォーマット・仕様・構造

調べたので備忘録。

種類

RSS1.0

  • シンプルな記述がウリ。テキスト配信向き?
  • RDFシリーズを元にして制作されている。
  • はてなRSSは1.0を使用。FC2も1.0を使用。

RSS2.0

  • 配信する文章の色を変えたり、リンクを仕込めるなど、グラフィック面でいろいろ出来る。コンテンツ配信向き?
  • RSS1.0の後継シリーズではない。(0.9x系の流れを汲む規格)
  • XMLシリーズを元にして制作されている。

ATOM

  • RSS2.0からいろいろ削って、よりシンプルに。よりスマートに。
  • GoogleGmail(ジーメール) にて、メールの内容を Atom フィードで提供するサービスを行っている。

構造

RSS1.0

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xml:lang="ja">

    <channel rdf:about="サイトのRSSのURL">
        <title>サイトのタイトル</title>
        <link>サイトのURL</link>
        <description>サイトの内容</description>
        <dc:date>RSSの最終更新日時</dc:date>
        <dc:language>ja</dc:language> 
        <items>
        <rdf:Seq>
        <rdf:li rdf:resource="記事1のURL" />
        <rdf:li rdf:resource="記事2のURL" />
        </rdf:Seq>
        </items>
    </channel>

    <item rdf:about="記事1のURL">
        <title>記事1のタイトル</title>
        <link>記事1のURL</link>
        <description><![CDATA[記事1の内容]]></description>
        <dc:creator>記事1の作者名</dc:creator>
        <dc:date>記事1の作成日時</dc:date>
    </item>

    <item rdf:about="記事2のURL">
        <title>記事2のタイトル</title>
        <link>記事2のURL</link>
        <description><![CDATA[記事2の内容]]></description>
        <dc:creator>記事2の作者名</dc:creator>
        <dc:date>記事2の作成日時</dc:date>
    </item>
</rdf:RDF>

RSS2.0

<?xml version='1.0' encoding='UTF-8'?>
<rss version='2.0'>
    <channel>
        <title>PHP & JavaScript:更新情報</title>
        <link>http://phpjavascriptroom.com/</link>
        <description>PHP & JavaScript Room:新着3件</description>
        <item>
            <title>記事タイトル3</title>
            <link>http://phpjavascriptroom.com/post3.html</link>
            <description>記事の内容です。</description>
            <pubDate>Wed, 11 Jun 2008 15:30:59 +0900</pubDate>
        </item>
        <item>
            <title>記事タイトル2</title>
            <link>http://phpjavascriptroom.com/post2.html</link>
            <description>記事の内容です。</description>
            <pubDate>Tue, 10 Jun 2008 15:30:59 +0900</pubDate>
        </item>
        <item>
            <title>記事タイトル1</title>
            <link>http://phpjavascriptroom.com/post1.html</link>
            <description>記事の内容です。</description>
            <pubDate>Mon, 9 Jun 2008 20:50:30 +0900</pubDate>
        </item>
    </channel>
</rss>

Atom

<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom' xml:lang='ja'>
    <id>tag:phpjavascriptroom.comfeed/</id>
    <title>PHP & JavaScript Room:更新情報</title>
    <updated>2008-06-11T15:30:59Z</updated>
    <link rel='alternate' type='text/html' href='http://phpjavascriptroom.com/feed/' />
    <link rel='self' type='application/atom+xml' href='http://phpjavascriptroom.com/feed/atom10.xml' />
    <entry>
        <id>http://phpjavascriptroom.com/post3.html#20080611</id>
        <title>記事タイトル3</title>
        <link rel='alternate' type='text/html' href='http://phpjavascriptroom.com/post3.html' />
        <updated>2008-06-11T15:30:59Z</updated>
        <summary>記事の内容です。</summary>
    </entry>
    <entry>
        <id>http://phpjavascriptroom.com/post2.html#200810153059</id>
        <title>記事タイトル2</title>
        <link rel='alternate' type='text/html' href='http://phpjavascriptroom.com/post2.html' />
        <updated>2008-06-10T15:30:59Z</updated>
        <summary>記事の内容です。</summary>
    </entry>
    <entry>
        <id>http://phpjavascriptroom.com/post1.html#20080609205030</id>
        <title>記事タイトル1</title>
        <link rel='alternate' type='text/html' href='http://phpjavascriptroom.com/post1.html' />
        <updated>2008-06-09T20:50:30Z</updated>
        <summary>記事の内容です。</summary>
    </entry>
</feed>

要素

  • channel
    チャンネル情報。 <channel>~</channel>
    • title(必須要素)
      チャンネル名。 <title>PHP & JavaScript Room:更新情報</title>
    • link(必須要素)
      チャンネルのURL。サイトURL。 <link>http://phpjavascriptroom.com/</link>
    • description(必須要素)
      チャンネルの説明。
      <description>PHP & JavaScript Room:新着3件</description>
    • item+
      チャンネルのコンテンツ情報。日付が新しいもの順。1つ以上~いくつでも。
      • title
        コンテンツのタイトル。ページタイトルや記事タイトル。
        <title>【Ajax】Simple JSの使い方</title>
      • link
        コンテンツのURL。
        <link>http://phpjavascriptroom.com/index.php?t=ajax&p=simplejs</link>
      • description
        コンテンツの概要。
        <description>14KBの超軽量JSライブラリ「Simple JS」をサンプル付きで紹介。</description>
      • author
        コンテンツを書いた人のメールアドレス。
        <author>amarron@yahoo.co.jp (PJ)</author>
      • category
        コンテンツのカテゴリ。
        <category>Ajax JavaScript</category>
      • comments
        コンテンツに対するコメントがあるページのURL。
        <comments>http://phpjavascriptroom.com/ajax/simplejs.html#comment</comments>
      • enclosure
        コンテンツに添付されるメディアオブジェクト。
      • guid
        コンテンツのユニークな永続的なURL。
        <guid>http://phpjavascriptroom.com/ajax/simplejs#he20080204</guid>
      • pubDate
        コンテンツの公開日。
        <pubDate>Mon, 4 Feb 2008 15:30:59 +0900</pubDate> <pubDate>Mon, 4 Feb 2008 15:30:59 GMT</pubDate>
      • source
        記事で引用しているRSSのチャンネル。引用元のURLを指定するurl属性は必須属性。
        <source url='http://www.sample.com/rss.xml'>sample.com</source>

参考サイト

[Web]RSSとRSS2とATOMの違いをまとめてみる。
[rss][atom]RSSとATOMの文書構造モデル(メモ書き)
RSS -- サイト情報の要約と公開
RSS 2.0 のフォーマット
Atom 1.0 のフォーマット

おすすめ書籍

もっとrssを知りたい方にオススメです。

App Store に iOSアプリ を 公開する方法

大まかな流れが中心です。画像や詳細なイベントは他の参考サイトで確認して下さい。
証明書関連の作成参考サイト:http://r-dimension.xsrv.jp/classes_j/ios_test/
iTunes Connectデベロッパガイド:https://developer.apple.com/jp/documentation/iTunesConnect_Guide.pdf

前提条件

Apple Developer Programに購入済み。
Apple Developer Program購入方法(法人)はこちら

流れ

  1. 証明書関連の作成(Certificates, Identifiers & Profiles)
    1-1. Certificatesの作成
    1-2. Identifiersの作成
    1-3. Devicesの追加(開発用のみ必要)
    1-4. Provisioning Profilesの作成
  2. Xcodeで証明書を設定
  3. 配布したいアプリの設定
    3-1. iTunesConnectでアプリを追加
    3-2. Xcodeでアーカイブ
    3-3. iTunesConnectでアプリの状態確認

1. 証明書関連の作成(Certificates, Identifiers & Profiles)

申請に必要な証明書関連を作成します。
証明書(CertificatesとProvisioning Profiles)は、ダウンロード後クリックするとMacのキーチェーン保存されます。
キーチェーンに保存後Xcodeでその証明書を選択しアプリの実機確認や配布用のアーカイブに利用します。

「Certificates, Identifiers & Profiles」の項目説明

url:https://developer.apple.com/account/ios/certificate/certificateList.action

  • Certificates
    開発者の証明書
    (開発用と製品用に1つずつ必要となります。(複数アプリで同じ証明書を利用する))
    (プッシュ通知を利用する場合は、さらにアプリごとに開発用と製品用に1つずつ必要となります。)

  • Identifiers
    アプリのID(1アプリに対して1つ必要、Wildcard App IDを選ぶと全アプリで利用可能となります。)

  • Devices
    実機確認用iPhone一覧(アプリに対して利用可能な実機を追加できます。)

  • Provisioning Profiles
    開発者とアプリを紐付けるファイル(1アプリに対して開発用と製品用に1つずつ必要となります。IdentifiersのWildcard App IDで証明書を作成すると全アプリで利用可能となります。)

f:id:Amarron:20140212110453p:plain

1-1. Certificatesの作成

左のメニューのCertificatesをクリックし右上の「+」で新規作成を行います 。

f:id:Amarron:20140212105838p:plain

Development(開発用)かProduct(製品用)かどちらかを選びます。
CSRファイルを作成します。(ここはMacのキーチェーンアクセスで行います)
(ユーザーのメールアドレスはAppIDで登録したメールアドレスを利用し、デスクに保存を設定するをチェックします。)

f:id:Amarron:20140212110007p:plain

作成したCSRファイルをアップロードします。
Certificates(証明書)が作成されるのでダウロードします。

1-2. Identifiersの作成

左のメニューのIdentifiersをクリックし新規作成を行います。

f:id:Amarron:20140212111710p:plain

名前(App ID Description Name)はアプリ名(英数)にすると分かりやすくなると思います。
接頭辞(App ID Prefix)はTeamIDが良さそうです。(複数の App ID Prefixとキーチェーンについて
識別子(App ID Suffix)は逆ドメインが推奨されています。(Wildcard App IDを選択すると全てのアプリ共通で利用出来ます。)
注意:Bundle App IDは、各アプリのBundle App ID(plistの「Bundle identifer」)と一致している必要があります。

f:id:Amarron:20140212120058p:plain

1-3. Devicesの追加(開発用のみ必要)

左のメニューのDevicesをクリックしデバイスを追加します。
メモ:「UDID」は、XcodeのOrganizerで確認出来ます。(Devicesで、対象のiPhoneを選択し「Identifier」がUUIDです)
注意:「Register Device」のNameは半角英数で登録しないと文字化けします。(文字化けした状態で複数登録してると判断出来なくなるので半角英数で登録すると分かりやすいと思います)

f:id:Amarron:20140212112532p:plain

1-4. Provisioning Profilesの作成

左のメニューのProvisioning Profilesをクリックし新規作成を行います。
「1-2. Identifiers」で作成したアプリIDと「1-3. Devices(開発用のみ必要)」を選択します。
「Provisioning Profiles」が作成されるのでダウンロードします。

f:id:Amarron:20140212113158p:plain

2. Xcodeで証明書を設定

Buid SettingのCode Signingで「1-1. iOS Certificates」で作成した証明書を設定します。
(プッシュ通知も必要な場合、「Provisioning Profile」に「1-4. Provisioning Profiles」を設定します)

f:id:Amarron:20140212114924p:plain

3. 配布したいアプリの設定

作成したアプリをApp Storeで配布するためにアプリを追加します。

3-1. iTunesConnectでアプリを追加

iTunesConnectに接続します。
Manage Your AppsをクリックしてAdd New Appを選択するとアプリの追加設定でができます。

f:id:Amarron:20140212133933p:plain

注意:「1-1. Certificates」で製品用の証明書を作成していないと、"You have no eligible Bundle IDs for iOS apps. Register one here."と表示され新しくアプリを追加出来ません。

App Informationでは、アプリ名(App Name)や管理番号(SKU Number)を設定します。
App Nameは、App Storeに表示されるアプリ名で申請の途中で変更可能です。(既に登録されている名前は登録出来ません。日本語入力出来ます。)
SKU Number、管理番号で途中で変更できません!(既に登録されている名前は登録出来ません、プロジェクト名等分かりやすい名前でOK)
Bundle IDは、「1-2. Identifiers」で設定したIDを選びましょう。

f:id:Amarron:20140212134412p:plain

配布希望日(Availability Date)は、未来日を設定します。私は2週間位先を大体設定しています。(AppStoreの新作として表示される日らしいです。)
アプリ料金(Price Tier)はアプリ料金を設定します。
教育機関向けの割引(Discount for Educational Institutions)は無料アプリであればチェックを外します。
法人向けカスタム非公開アプリ(Custom B2B App)もチェックを外します。

f:id:Amarron:20140513123236p:plain

アプリの詳細情報を入力を完了すると、ステータスが「Prepare for Upload」に変わり「Ready to Upload Binary」が選択できるようになります。 f:id:Amarron:20150314203827p:plain

「Ready to Upload Binary」が選択し、法的な質問に答えるとステータスが「Waiting For Upload」に変更されます。
Xcodeでアーカイブを作成しましょう。

3-2. Xcodeでアーカイブ

Buid SettingのCode Signingで「1-1. iOS Certificates」で作成した証明書を設定します。(製品用に変更します)
(プッシュ通知も必要な場合、「Provisioning Profile」に「1-4. Provisioning Profiles」も製品用に変更します)

f:id:Amarron:20140212114924p:plain

ツールバーのProduct->Archiveを選択します。
アーカイブが完了するとOrganizer画面が表示されるので「Validate」を選択しましょう。(Validateでエラーになる場合が多いのでハマるかもしれません。。。)
Validateが成功したらDistributeを選択しましょう。
f:id:Amarron:20150314203850p:plain

3-3. iTunesConnectでアプリの状態確認

ステータスが「Waiting For Upload」から「Upload Received」に変更されていればアプリの追加成功です。
数分後に「Waiting For Review」に変更されます。
後は、App Storeに公開されるのを待つだけです。お疲れ様した。

今後のステータス

Waiting For Review

In Review(Appleレビュー中)

Processing for App StoreApp Storeに公開されるまでのチョットした待ち時間)

Redy for Sale(App Storeに公開されている状態)
(2015/01追記:Redy for Sale(販売準備完了)にステータスが変更されてもすぐにストアに公開されない場合もあるようです。24時間過ぎても公開されないようであればAppleへ問合せしましょう。問合せはiTunesConnectのフッターの「連絡先」リンクより問合せが出来ます。)

「Waiting For Review」と「In Review」はトータルで1〜2週間かかります。(アプリにもよります)
審査NGの場合、「Processing for App Store」へ進まず「Rejected」のステータスになります。(指摘内容を修正して再度、「3-2. Xcodeでアーカイブ」からやり直し)
「Processing for App Store」は、数時間で「Redy for Sale」へ変更されます。