2015年12月6日日曜日
iOSでスキーマを使用してiTunesとApple Musicを起動する
iOSでiTunesのurlをスキーマ起動させた時に指定がないとApple Musicが起動されてしまいますが、iTunesを起動する方法を紹介します。
方法といってもとても簡単でurlパラメータをくっつけるだけです。
[iTunes]
app=itunes
[Apple Music]
app=music
ツイート
2015年4月26日日曜日
Xcode6.3+swiftでInstallation Failed Invalid argumentが出たときにやったこと
あ、どうも、swift環境に悪戦苦闘している管理人です。
Xcode6.3+swiftの環境でInstallation Failed Invalid argumentが出てシミュレーターにインストールができないという現象に悩まされたのですが、原因は
Resources
という名前のフォルダーをプロジェクトに追加しているからでした。グループ名にResourcesを使っている場合は問題ありません。メニューのAdd Files toからResourcesという名前のフォルダを選択して追加するとInstallation Failed Invalid argumentが発生しました。
フォルダー名前を変更してXcodeを再起動すれば解決しました。
ツイート
ラベル:
iPhoneDev
,
Objective-C
,
swift
,
Xcode
2014年8月23日土曜日
iPhoneアプリでジャンケンゲームを作ってみた
ゲームプログラミングの"いろは"および"設計パターン"を模索する為にジャンケンゲームを作ってみました。
原因としてはじゃんけんの手をプレイヤーが任意のタイミングで決定することができるという仕様が考えられます。
もし、ジャンケン開始時に手を決定するフェーズを設けた場合、モデルの機能は
のみとなりかなりシンプルになると思われます。
さらに、勝敗がジャンケン開始前に確定しているのでビューやコントローラーもかなり作り易くなると思われます。
[追記]
”あいこ"のことを全然考えていませんでした。”ジャンケン開始時に手を決定するフェーズを設ける"という設計は"あいこ"に対応出来ませんね。
また、プレイヤーが任意のタイミングで手を決定するというアクション性の高いゲーム性を実現する為の設計を模索する必要が有りそうです。
ツイート
bitbucketにsrcをアップしてあります。
https://bitbucket.org/yskmanabe/janken参考にしたサイト
考察
たかがジャンケンゲームなのにかなり複雑になっしまいました(特にモデルの部分)。原因としてはじゃんけんの手をプレイヤーが任意のタイミングで決定することができるという仕様が考えられます。
もし、ジャンケン開始時に手を決定するフェーズを設けた場合、モデルの機能は
- 勝敗の判定
- 勝負履歴の管理
のみとなりかなりシンプルになると思われます。
さらに、勝敗がジャンケン開始前に確定しているのでビューやコントローラーもかなり作り易くなると思われます。
[追記]
”あいこ"のことを全然考えていませんでした。”ジャンケン開始時に手を決定するフェーズを設ける"という設計は"あいこ"に対応出来ませんね。
また、プレイヤーが任意のタイミングで手を決定するというアクション性の高いゲーム性を実現する為の設計を模索する必要が有りそうです。
ツイート
ラベル:
iPhoneDev
,
Objective-C
,
ゲーム
2014年5月16日金曜日
AVCaptureDeviceのフレームレートを設定したのに反映されないキミへ
まずは次の確認をしてほしい。
- フレームレートを設定する前にAVCaptureSessionへAVCaptureDeviceInputが追加されているか
- AVCaptureDeviceのlockForConfigurationを呼び出してデバイスをロックした後にフレームレートを設定しているか
上記を考慮したサンプルソースがこれだ
検討を祈る
ツイート
ラベル:
iPhoneDev
,
Objective-C
2013年11月11日月曜日
iOS7からhidesBottomBarWhenPushedでタブバーが非表示にならない?
iOS7になって
self.hidesBottomBarWhenPushed = YES;
を記述してもなぜかタブバーが非表示になってくれないので
UITabBarControllerのviewDidLoadにて
self.tabBar.hidden = YES;
を記述してとりあえず対応しました。
画面単位の表示、非表示の切り換えとかどうしよう。。。
ツイート
self.hidesBottomBarWhenPushed = YES;
を記述してもなぜかタブバーが非表示になってくれないので
UITabBarControllerのviewDidLoadにて
を記述してとりあえず対応しました。
画面単位の表示、非表示の切り換えとかどうしよう。。。
ラベル:
iPhoneDev
,
Objective-C
,
UIKit
2013年8月13日火曜日
[NSData dataWithContentsOfURL:]を使って簡単に非同期HTTP通信を実装する
iPhoneアプリでサーバーと非同期通信してデータを取得したいと思ったら
NSMutableURLRequest
ベーシック認証なんかもdataWithContentsOfURLを使用すれば簡単に実装できます。
ツイート
NSMutableURLRequest
NSURLConnection
NSOperationQueue
を使用して自前で実装したりフリーのライブラリを使用して受信データをNSDataに格納する人が多いと思いますが、実はNSDataには指定されたURLからデータを取得する
/*
*指定されたurlからデータを取得する
*@param url データを読み込むurl
*@param readOptionsMask 読み込んだデータをキャッシュしない等のオプション指定
*@param errorPtr エラーが発生した際のエラー格納先
*@return 受信データ
*/
*指定されたurlからデータを取得する
*@param url データを読み込むurl
*@param readOptionsMask 読み込んだデータをキャッシュしない等のオプション指定
*@param errorPtr エラーが発生した際のエラー格納先
*@return 受信データ
*/
+ (id)dataWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr;
というメソッドが用意されているんですね。
使い方はいたって簡単で
使い方はいたって簡単で
こんな感じでかなり簡単に実装できます。
が、このdataWithContentsOfURLには重大な欠点があります。
それは非同期では無いという事です。
つまりデータのダウンロードが完了するまでアプリがフリーズしてしまうんですね。
しかし、ご安心くださいGCD(Grand Central Dispatch)というObjective-Cの機能を使用すれば簡単に非同期にすることができるのです。
GCDの簡単な使い方は
dispatch_queue_t q_global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t q_main = dispatch_get_main_queue();
dispatch_async(q_global, ^{
// ここに非同期(バックグラウンド)で実行したい処理を記述
こうなります。が、このdataWithContentsOfURLには重大な欠点があります。
それは非同期では無いという事です。
つまりデータのダウンロードが完了するまでアプリがフリーズしてしまうんですね。
しかし、ご安心くださいGCD(Grand Central Dispatch)というObjective-Cの機能を使用すれば簡単に非同期にすることができるのです。
GCDの簡単な使い方は
dispatch_queue_t q_global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t q_main = dispatch_get_main_queue();
dispatch_async(q_global, ^{
// ここに非同期(バックグラウンド)で実行したい処理を記述
});
こんな感じです。
GCDを使って先ほどのdataWithContentsOfURLを非同期化すると
こんな感じです。
GCDを使って先ほどのdataWithContentsOfURLを非同期化すると
ベーシック認証なんかもdataWithContentsOfURLを使用すれば簡単に実装できます。
ツイート
ラベル:
iPhoneDev
,
Objective-C
2013年5月3日金曜日
ARCを使わないObjective-Cのメモリ管理はこうすればリークも不正落ちも怖くない
Objective-Cはガベージコレクションを搭載していないので、メモリ管理が結構たいへんですがルールを決めてしまえばそんなに大変ではなくなるので楽してメモリ管理する方法をまとめてみました。
※Objective-Cで使用できる主なプリミティブ型
short (signed short)
unsigned short
int (signed int)
unsigned int
float
double
char
BOOL
ツイート
[前提条件]
- xcode4.5以上を使用する。
[ポイント概要]
- プロパティ記述時の属性(retain assign copy)を使い分ける
- alloc時にはautoreleaseを記述する
- 自クラス内のインスタンス変数へアクセスする時はプロパティを使用する
- retain、copy属性のプロパティはdealloc内でnilを代入する
[ポイント詳細]
ポイント1:プロパティの記述時の属性(retain assign copy)を使い分ける
ヘッダーファイルのクラス宣言内に記述するプロパティの属性を正しく使い分けます。- object型はretainを指定する
- NSString型はcopyを指定する
- プリミティブ型はassignを指定する
- delegateはassignを指定する
※Objective-Cで使用できる主なプリミティブ型
short (signed short)
unsigned short
int (signed int)
unsigned int
float
double
char
BOOL
ポイント2:alloc時にはautoreleaseを記述する
オブジェクトをallocしたら必ずautoreleaseを記述します。ポイント3:自クラス内のインスタンス変数へアクセスする時はプロパティを使用する
プロパティを使用しない場合、メモリリークや解放済みのオブジェクトへのアクセスが発生する可能性が高くなります。ポイント4:retain、copy属性のプロパティはdeallocないでnilを代入する
retain、copy属性が指定されたプロパティはdeallocでnilを代入しないとメモリリークが発生してしまいます。◎autoreleaseを記述しない方がいい場合
例外としてループ(for、while)内でオブジェクトを生成する場合はメモリ節約の観点からautoreleaseを使用しない方が良いでしょう。
ラベル:
iPhoneDev
,
Objective-C
,
Xcode
2013年1月30日水曜日
UIWebViewおよびUIImageでDocuments配下の画像を読み込む
UIWebViewやUIImageViewでDocumentsフォルダ配下の画像ファイルを指定するには
次のように実装します。
ちなみに
次のように実装します。
NSString *directory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
では取得出来ませんでした。
ツイート
ラベル:
iPhoneDev
,
Objective-C
2013年1月25日金曜日
xcodeのストーリーボード(storyboard)で初期値設定を独自に追加する
ストーリーボードのattributes inspectorに表示されないプロパティやUIViewを継承して追加した独自のプロパティ等をストーリーボードから初期値設定したい場合は
identity inspectorのUser Defined Runtime Attributes
に追加することで設定出来ます。
例)UIViewのexclusiveTouchを初期値YESに設定する
ツイート
identity inspectorのUser Defined Runtime Attributes
に追加することで設定出来ます。
例)UIViewのexclusiveTouchを初期値YESに設定する
ツイート
ラベル:
iPhoneDev
,
Objective-C
,
UIKit
,
Xcode
2012年12月21日金曜日
Could not launch No such file or directory
xcodeで
「Could not launch No such file or directory 。。。」
ってエラーが出てアプリが起動しなくなってしまった時に行ったこと。
ツイート
「Could not launch No such file or directory 。。。」
ってエラーが出てアプリが起動しなくなってしまった時に行ったこと。
- xcodeの再起動
- アプリ削除
- クリーンビルド
ツイート
2012年11月12日月曜日
unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard
xcode4.5以降でUITableViewのdelegateメソッドが自動生成されると、このエラーが出る場合があります。
原因は
ツイート
原因は
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{]
内に自動生成されたコードに
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
が記述されているからです。
このメソッドはiOS6.0以降でないと使用できません。
なのでiOS6.0未満も対応しているアプリではエラーとなってしまいます。
◎解決方法
従来の
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier;
を使用するだけで解決します。
ツイート
ラベル:
iPhoneDev
,
Objective-C
,
UIKit
,
Xcode
2012年11月8日木曜日
xcodeプロジェクトをgitで管理する際に無視させるディレクトリとファイル
.DS_Store
*.xcodeproj/*.mode1v3
*.xcodeproj/*.pbxuser
*.xcodeproj/*.xcworkspace
*.xcodeproj/xcuserdata/
*.xcworkspace/xcuserdata/
build/
.svn/
*.swp
*.nib
Thumbs.db
*.[oa]
*~
*.bak
◎無視させるようにする手順
- ターミナルを起動する
- $git config --global core.excludesfile $HOME/.gitexclude
- .gitexcludeファイルに無視するディレクトリやファイルを記述する
※上記の方法で無視させた場合、環境依存になってしまう(MAC毎に設定が変わってしまう)為、プロジェクト毎に.gitignoreを配置するのが良いでしょう
2012年11月2日金曜日
iphoneシミュレーターで現在位置を変更したい
iphoneシミュレーターの現在位置は初期設定だとアメリカになっています。
現在位置はiphoneシミュレーターのメニューから変更することが可能です。
現在位置はiphoneシミュレーターのメニューから変更することが可能です。
iphoneシミュレーターの現在位置を変更するスクリーンショット
ツイート
2012年10月22日月曜日
iphoneシミュレーターのホームボタンがなくなっている。
iphone5シミュレーターにはホームボタンがないのですが、メニューからホーム画面に遷移させることができます。
iphone5シュミレーターのホームボタンを表示するメニューのスクリーンショット
ツイート
2012年10月5日金曜日
2012年10月1日月曜日
'hoge.js' of type sourcecode.javascript for architecture i386ってwarnigを消したい
xcodeではAdd filesで.jsファイルを追加した場合にCompile Sourcesに追加されてしまい、「jsファイルのコンパイル方法がわかりません」と表題のワーニングが出てしまいます。
このワーニングを消す手順を紹介します。
ツイート
このワーニングを消す手順を紹介します。
- Compile Sourcesから.jsファイルを削除する
- Copy Bundle Resourcsに.jsファイルを追加する。
1.Compile Sourcesから.jsファイルを削除する
2.Copy Bundle Resourcsに.jsファイルを追加する。
ラベル:
iPhoneDev
,
Objective-C
,
Xcode
2012年9月5日水曜日
Objective-Cでクラスメソッドの有無を判定する
そのクラスに指定したクラスメソッド(セレクター)が存在するのか判定する為には
- (BOOL)respondsToSelector:(SEL)aSelector;
を利用します。 このメソッドはインスタンスメソッドなんですけど、なぜかクラスに対して呼び出すことができます。コンパイルも通るし実行時に落ちたりもしません。(小一時間調べたけど分からずじまい) ツイート
- (BOOL)respondsToSelector:(SEL)aSelector;
を利用します。 このメソッドはインスタンスメソッドなんですけど、なぜかクラスに対して呼び出すことができます。コンパイルも通るし実行時に落ちたりもしません。(小一時間調べたけど分からずじまい) ツイート
ラベル:
iPhoneDev
,
Objective-C
2012年8月24日金曜日
「Declaration of 'struct sockaddr_in' will not be visible outside of this function」って警告がでちゃったYO
「Declaration of 'struct sockaddr_in' will not be visible outside of this function」の解決方法は
ツイート
- netinet/in.hをインポートする
ツイート
ラベル:
iPhoneDev
,
Objective-C
2012年7月6日金曜日
ゲームのデータを考える時のヒント
ゲームのデータを考えるのってすーーっごく大変なんだと最近分かりました。
ツイート
ただ闇雲に考えてもなかなか思い浮かばないのでヒントをまとめてみました。
◎モンスター編
- 新しい生息地を与える(ツンドラ・ウルフ)
- 新しい色を与える(ブラック・ドラゴン)
- 新しい見た目を与える(クリスタル・タートル)
- 新しい属性を与える(ヴェノム・スパイダー)
- 新しい能力を与える(フライング・ソード)
- 合成する(ドラゴン・アント)
- 他の物に例える(スパイク:とげが生えた芋虫、シー・デビル:タコみたいの)
- 表現を変える(ファイア、フレイム、ブレイズ、バーン、アグニート)
- ドロップ・アイテムを参考にする(血の結晶:ブラッド・スライム)
- 巨大化させる(ジャイアント・ワーム)
- 強さのランク付けをする(ウォーリアー、ナイト、マスター、ロード)
- 乗りものに乗せる(ドラゴン・ライダー)
- レア度を考える(common、uncommon、rare、boss、s-boss)
◎アイテム編
- アイテムの用途を考える(回復、攻撃、治療、素材)
- モンスターや特定種族が生成するアイテムを考える(オーク・メタル)
- モンスターの体から採取することを考える(ねずみのしっぽ)
- 素材に分割する(布・蜘蛛の糸・鉄)
- 強弱、大小、等ランクをつける(レッサー、ノーマル、グレーター)
◎装備編
- 属性や魔力を与える(フレイム・アーマー、ホーリー・クロス)
- 材料から考える(アイアン・ヘルム)
- 特定のモンスターや種族の名前を与える(イフリート・ロッド、エルヴン・ブーツ)
- シリーズ化する(レザー・ヘルム、レザー・アーマー、レザー・ブーツ)
- 特化能力から考える(スピード・ブーツ、デーモン・キラー)
- 職業から考える(盗賊の指輪)
- 表現をかえる(クロス、ローブ、アーマー、シャツ、メイル)
2012年6月13日水曜日
cocos2dで開発環境をretina専用(低解像度非対応)にする
最近はcocos2dを触っているのですがデバイス3GS以下が比対応の場合に画像を低解像度、retina、二つ用意するのは面倒なのでretina用の画像だけでcocos2d開発する方法を調べました。
- retina用の画像だけを用意する。例)hoge.png
- CCDirectorをretinaに対応させる
- retina用のファイル名サフィックスを設定する
サフィックスを空文字にするだけでした、ちゃんちゃん。
ツイート
登録:
投稿
(
Atom
)