*

iOSプログラミングのキモ(拡張子がpchというファイルの役目)

公開日: : Apple, iOS, iPad, iPhone, Objective-C, XCode

XCodeで プロジェクトを作成すると、<プロジェクト(アプリ)名>-prefix.pch というファイルができています。このファイルはソースコードコンパイル時に自動的にインクルードされる ヘッダーファイルです。全てのソースコードに関係する 設定情報やインクルードファイルを指定することで 其々のソースコードにいちいち #import を指定しなくても済むようになります。

QTubeの QTube-prefix.pch の中身は以下のようになっています。

#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>

    #import <CoreData/CoreData.h>
    #import "CoreData+MagicalRecord.h"
    #define MR_SHORTHAND 1

  // ここから 自分が追加した #import した部分
    #import "ASIHTTPRequest.h"
    #import "PKRevealController.h"
    #import "UIViewController+PKRevealController.h"
    #import "SDSegmentedControl.h"
    #import "iRate.h"
    #import "NSString+HTML.h"
    #import "AppDelegate.h"
  // ここまで 自分が追加した #import した部分
#endif

// ここから 自分が追加した #import した部分
#import "Debug.h"
#import "Defines.h"
// ここまで 自分が追加した #import した部分

自分で追加した 行について簡単に説明すると #ifdef __OBJC__ で括られた部分については
cocoapods で追加した ライブラリ や AppDelegate.h を指定しています。
実際にそのソースでライブラリを使うかどうかは はっきりしていなくても こうやって指定しておくことで使う段になっても #import を追加する手間が 省けるので そうしています、横着ですね(^^;

最後の2行は 全てのソースコードに関係します。Debug.hは別のエントリで説明したとおり コンソールにログを出力するためのマクロです。Defines.hはプロジェクト全体に影響する 定数値を #define で定義しています。

Debug.h

//
//  define.h
//
//  Created by Matsuda Katsumi on 2013/06/26.
//  Copyright (c) 2013年 LISONAL ltd. All rights reserved.
//

#ifndef QTubeTestBrowser_define_h
#define QTubeTestBrowser_define_h

#define LocaleCountryCode @"LocaleCountryCode"

#define MaxConcurrentDownloadDefaultCount 0
// #define MaxConcurrentDownloadDefaultCount 4
#define MAX_RESULT 50
#define MAX_QUEUE_PLAY_TIMES 10
#define VIEW_TIMER_VALUE 10.0f

#define NOTIFICATION_COUNTRY_SELECTED @"NOTIFICATION_COUNTRY_SELECTED"
#define VIDEO_DOWNLOAD_COMPLETE @"VIDEO_DOWNLOAD_COMPLETE"
#define VIDEO_DOWNLOAD_START @"VIDEO_DOWNLOAD_START"
#define VIDEO_DOWNLOAD_PROGRESS @"VIDEO_DOWNLOAD_PROGRESS"
#define VIDEO_DOWNLOAD_END @"VIDEO_DOWNLOAD_END"
#define VIDEO_DOWNLOAD_FAILURE @"VIDEO_DOWNLOAD_FAILURE"
#define VIDEO_DOWNLOAD_SUSPENDED @"VIDEO_DOWNLOAD_SUSPENDED"
#define VIDEO_DOWNLOAD_QUEUED @"VIDEO_DOWNLOAD_QUEUED"
#define VIDEO_DELETED @"VIDEO_DELETED"
#define VIEW_COUNT_UP @"VIEW_COUNT_UP"
#define ALL_VIDEO_DELETED @"ALL_VIDEO_DELETED"
#define YOUTUBE_GDATA_URL_CHANGED @"YOUTUBE_GDATA_URL_CHANGED"
#define SEARCH_WORD_SELECTED @"SEARCH_WORD_SELECTED"
#define NEW_VIDEOID_SELECTED @"NEW_VIDEOID_SELECTED"

#define APPLICATION_DID_ENTER_BACKGROUND_NOTIFICATION @"APPLICATION_DID_ENTER_BACKGROUND_NOTIFICATION"
#define APPLICATION_DID_BECOME_ACTIVE_NOTIFICATION @"APPLICATION_DID_BECOME_ACTIVE_NOTIFICATION"
#define START_VIDEO_PLAY_NOTIFICATON @"START_VIDEO_PLAY_NOTIFICATON"
#define START_QTUBE_VIDEO_PLAY_NOTIFICATON @"START_QTUBE_VIDEO_PLAY_NOTIFICATON"
#define COUNTRY_CODE_CHANGED_NOTIFICATION @"COUNTRY_CODE_CHANGED_NOTIFICATION"

//https://developers.google.com/youtube/2.0/reference?hl=ja#youtubeDataAPIFeedTypes
//#define GDATA_TOPRATED @"http://gdata.youtube.com/feeds/api/standardfeeds/JP/top_rated?alt=json";

// http://gdata.youtube.com/feeds/api/videos?category=Comedy&hl=ja&alt=json
// attr time top_rated、top_favorites、most_viewed、most_popular、most_discussed、most_responded
#define GDATA_SEARCH_URL @"https://gdata.youtube.com/feeds/api/videos?q=%@&start-index=%d&max-results=%d&alt=json"
#define GDATA_AUTHER_SEARCH_URL @"https://gdata.youtube.com/feeds/api/videos?author=%@&start-index=%d&max-results=%d&alt=json"
#define GDATA_RELATED_URL @"https://gdata.youtube.com/feeds/api/videos/%@/related?start-index=%d&max-results=%d&alt=json"

#define GDATA_URL       @"https://gdata.youtube.com/feeds/api/standardfeeds"
#define GDATA_TOPRATED  @"/%@/top_rated?alt=json&&orderby=published&start-index=%d&max-results=%d&time=%@"
#define GDATA_FAVORITES @"/%@/top_favorites?alt=json&&orderby=published&start-index=%d&max-results=%d&time=%@"
#define GDATA_VIEWED    @"/%@/most_viewed?alt=json&&orderby=published&start-index=%d&max-results=%d&time=%@"
#define GDATA_POPULAR   @"/%@/most_popular?alt=json&&orderby=published&start-index=%d&max-results=%d&time=%@"
#define GDATA_RECENT    @"/%@/most_recent?alt=json&&orderby=published&start-index=%d&max-results=%d&time=%@"
#define GDATA_DISCUSSED @"/%@/most_discussed?alt=json&&orderby=published&start-index=%d&max-results=%d&time=%@"
#define GDATA_RESPONDED @"/%@/most_responded?alt=json&&orderby=published&start-index=%d&max-results=%d&time=%@"
#define GDATA_FEATURED  @"/%@/recently_featured?alt=json&&orderby=published&start-index=%d&max-results=%d&time=%@"
#define GDATA_MOBILE    @"/%@/watch_on_mobile?alt=json&&orderby=published&start-index=%d&max-results=%d&time=%@"

/*
 指定可能なカテゴリ名は以下になります。
 Film & Animation / 映画とアニメ
 Autos & Vehicles / 自動車と乗り物
 Music / 音楽
 Pets & Animals / ペットと動物
 Sports / スポーツ
 Travel & Events / 旅行とイベント
 Gaming / ゲーム
 Comedy / コメディー
 People & Blogs / ブログと人
 News & Politics / ニュースと政治
 Entertainment / エンターテイメント
 Education / 教育
 Howto & Style / ハウツーとスタイル
 Nonprofits & Activism / 非営利団体と社会活動
 Science & Technology / 科学と技術
 */
// http://d.hatena.ne.jp/shobonengine/20110224/1298540779
// http://gdata.youtube.com/feeds/api/standardfeeds/JP/most_viewed_Film?time=today&alt=json
#define GDATA_FILM   @"http://gdata.youtube.com/feeds/api/videos?category=Film&hl=%@&alt=json";
#define GDATA_AUTOS  @"http://gdata.youtube.com/feeds/api/videos?category=Autos&hl=%@&alt=json";
#define GDATA_MUSIC  @"http://gdata.youtube.com/feeds/api/videos?category=Music&hl=%@&alt=json";
#define GDATA_PETS   @"http://gdata.youtube.com/feeds/api/videos?category=Pets&hl=%@&alt=json";
#define GDATA_SPORTS @"http://gdata.youtube.com/feeds/api/videos?category=Sports&hl=%@&alt=json";
#define GDATA_TRAVEL @"http://gdata.youtube.com/feeds/api/videos?category=Travel&hl=%@&alt=json";
#define GDATA_GAMING @"http://gdata.youtube.com/feeds/api/videos?category=Gaming&hl=%@&alt=json";
#define GDATA_COMEDY @"http://gdata.youtube.com/feeds/api/videos?category=Comedy&hl=%@&alt=json";
#define GDATA_PEOPLE @"http://gdata.youtube.com/feeds/api/videos?category=People&hl=%@&alt=json";
#define GDATA_NEWS   @"http://gdata.youtube.com/feeds/api/videos?category=News&hl=%@&alt=json";
#define GDATA_ENTERTAINMENT @"http://gdata.youtube.com/feeds/api/videos?category=Entertainment&hl=%@&alt=json";
#define GDATA_EDUCATION     @"http://gdata.youtube.com/feeds/api/videos?category=Education&hl=%@&alt=json";
#define GDATA_HOWTO         @"http://gdata.youtube.com/feeds/api/videos?category=Howto&hl=%@&alt=json";
#define GDATA_NONPROFIT     @"http://gdata.youtube.com/feeds/api/videos?category=Nonprofits&hl=%@&alt=json";
#define GDATA_SCIENCE       @"http://gdata.youtube.com/feeds/api/videos?category=Science&hl=%@&alt=json";

typedef enum {
    QTubeVideoStatusDownloadQueue     = -1,
    QTubeVideoStatusDownloadNow       = 0,
    QTubeVideoStatusDownloadSuccess   = 1,
    QTubeVideoStatusDownloadFailure   = 2,
    QTubeVideoStatusDownloadSuspend   = 3,
    QTubeVideoStatusFileDeleted       = 4,
} QTubeVideoStatus;

#endif

Debug.hの中身は 別のエントリの中で 少しずつ 解説しますが、見る人が見れば 結構 生々しい 印象を受けるかもしれません(特にコメント等が)このブログでは 出来るだけ そのまんまのソースを出していくことで 実際のプログラミングのリアル感を 感じてもらえればと思っています。

関連記事

iOSプログラミングのキモ(2:ソースコード概説 )主要なObjective-Cソース・ファイル一覧

QTubeの主要Objective-Cのソース一覧です。 iOSでは アプリを作る場合 Objec

記事を読む

iOSプログラミングのキモ(AppDelegate説明 デバッグをやりやすくするための工夫:NSSetUncaughtExceptionHandler )

デバッグはプログラミングを進めていく上で避ける事が出来ません。どうしてもバグは入ってきます。重要なの

記事を読む

iOSプログラミングのキモ(1:QTubeアプリの説明 )

ソースの説明の前に、QTubeとはどんなアプリなのかを説明します。 QTubeは Youtub

記事を読む

iPhoneが7GBの転送制限に引っかかりそうになって Nexus7(2013)LTE版のテザリング機能が大活躍

皆さんは スマホを使ってて、転送制限に引っかかったことはありますか?私はあります(笑) 最

記事を読む

FileQ iOS版 公開しました。

5/2にFileQ iOS版を無事、公開しました。Appleの審査もスンナリ通り ホットしています(

記事を読む

iOSプログラミングのキモ(iOS7から使えるようになったマルチタスク機能、NSURLSessionUploadTask の困った現象)

このブログでも度々書いてきたFileQ iOS版ですが、今月末に Appleに申請できそうな

記事を読む

iOSプログラミングのキモ(デバッグをやりやすくするための工夫:コンソール・ログの出し方 )

iOS上でプログラミングをする時、ログ出力用の関数としてNSLogという関数をよく使います。NSLo

記事を読む

iOSプログラミングのキモ(MainViewController説明)

個別の画面のコードについて解説を進めていきます。最初は起動直後の画面であるMainViewContr

記事を読む

iOSプログラミングのキモ(AppDelegate説明 iPhone5以降とiPhone4S以前を画面サイズで判別する )

iPhone5以降 画面サイズが2パターン(iPhone6ではさらに増えるかも・・(^^;))になっ

記事を読む

iOSプログラミングのキモ(2:ソースコード概説 )XCode

iOSプログラミングでは Appleが提供している XCodeという開発ツールを使います。

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

FileQ Hosting 月額99円 容量1GB


サイト管理 Mezzanine
Django上で動くCMS Mezzanine 用のモジュールを作ってみる その1

Django上で動くCMS Mezzanine上で動く、モジュールを作

ホーム Mezzanine
Django上で動くCMS Mezzanine を インストールする MacOSX Yesemite 編

Mezzanineは Django WEBフレームワーク上で動くCMS

EclipseにGWT(Google Web Toolkit) Plugin for Eclipseを入れようとしてハマった

最近PHPでちょっとした業務システムを作りました。業務システムの特徴と

ブログを半年やった成果を Google Analytics から眺める

今年の1月からブログを書き始め、そろそろ半年が経とうとしています。

母校で特別 講義をやってきました。

少し 間が空いてしまいました(^_^;) ちょっと前になりますが

→もっと見る

mautic is open source marketing automation
PAGE TOP ↑