ラベル Objective-C の投稿を表示しています。 すべての投稿を表示
ラベル Objective-C の投稿を表示しています。 すべての投稿を表示

2015年10月6日火曜日

[iOS]【図解】テストアプリを実機で実行するのに面倒なプロビジョニングプロファイル作成を省略する!


背景

iOS(Xcode)で実装をしている際、ちょっと試すためにテストアプリを作りたい場合がある。

端末内だけでシュミレーターを使える場合は問題ないけれど、実機でしか利用できないセンサーなどの動作を試したり、誰かに見せるために実機にインストールしたい場合には、プロビジョニングプロファイルが必要である。

これが面倒なんですよね・・・

実はこれ省略できます。
さて、環境を作っていきましょう。

2015年9月9日水曜日

[XCode]【Your account already has a valid iOS Distribution certificate】AdHoc出力できないときの対処方法

エラー


Your account already has a valid iOS Distribution certificate
If you have your signing identity on another Mac, you can import a developer profile.
You can also revoke the current certificate and request one again.

背景

Macを新しくしてから、以前に作成したアプリをAdHoc出力しようとしたときに出たエラーです。

Provisioning Profiles は確かに新しくしたはず。
実機でデバッグもできるし、特に問題なくいけていると思っていたのに・・・

いろいろな原因があるのだと思うが、私の場合は次の方法で解決ができました。


2015年8月17日月曜日

[XCode]【App installation failed】実機で実行できないときの対処方法

エラー


App installation failed
The application could not be verified.

背景

ついさっきまで実機実行できていたのに、上記のインフォメーションとともに、なぜか急に実機で実行できなくなってしまった。

何度ビルドかけても、ビルドは成功するんですが、実機で実行できない。

やったことといえば、iPhoneのバージョンアップのお知らせがきて、休憩がてらバージョンを3.4.1にあげたことくらい。
まあこれが原因なんだろうとググったところ解決方法は簡単でした。


2015年8月7日金曜日

[XCode] アプリ作成時によく見るエラーとその解決法 まとめ


はじめに

XCode(Objective-C)でよく見るエラーや警告を集めました。

前々からこういう整理した記事が個人的に欲しかったので作ってみました。

解決方法はざっくりと書きます。
詳細な解決方法はリンク先の記事(当ブログ記事や別サイト記事)に委ねます。

この記事は随時、追加や更新をして、今後どんどん育てていく予定です。
参照するたびに変更になっている可能性があります。ご了承ください。
今後、当ブログでエラーの記事を書いた場合は、別途記事を書いた上で、ここにリンクする予定です。

では、始めてまいりましょう。

2015年7月24日金曜日

[Objective-C] iOSアプリにソーシャル機能を組み込む【実践編】

はじめに

以前に投稿した下の記事でソーシャル機能の分析と目的、効果について少し書きました。
人気アプリから学ぼう 「ねこあつめ」その5:ソーシャル機能を分析しよう!編

今回はそれの実践編です。

基本的にはコードを見てもらえば、理解していただけると思うのですが、それぞれ少しづつ注意点があるので、確認してください。




Facebookへの投稿

利用するには、Social.frameworkの追加が必要です。


【簡単な説明】
SLComposeViewController *facebookPostVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[facebookPostVC setInitialText:text];
[facebookPostVC addURL:[NSURL URLWithString:url]];
[facebookPostVC addImage:[UIImage imageNamed:image]];
[facebookPostVC setCompletionHandler:^(SLComposeViewControllerResult result) {
    if (result == SLComposeViewControllerResultDone) {
        //投稿完了の処理
    }
}];
[ViewController presentViewController:facebookPostVC animated:YES completion:nil];
SLComposeViewControllerを利用して、Facebookに対し、投稿テキスト、URL、イメージを投稿しています。
投稿完了時にはイベントを受け取り、投稿のお礼メッセージや、プレゼントなど処理をします。


Twitterへの投稿

利用するには、iOSバージョンごとに適切なframeworkの追加が必要です。
iOS6.0以上の場合、Social.frameworkの追加が必要
iOS5.0以下の場合、Twitter.frameworkの取り込みが必要


【簡単な説明】
NSString *iosVersion = [[[UIDevice currentDevice] systemVersion] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if ([iosVersion floatValue] >= 6.0) {
}
else if ([iosVersion floatValue] >= 5.0) {
}
iOSのバージョンで、Social.frameworkを使うか、Twitter.frameworkを利用するかを決定しています。

SLComposeViewController *twitterPostVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[twitterPostVC setInitialText:text];
[twitterPostVC addURL:appURL];
[twitterPostVC addImage:[UIImage imageNamed:image]];
[twitterPostVC setCompletionHandler:^(SLComposeViewControllerResult result) {
    if (result == SLComposeViewControllerResultDone) {
        //投稿完了の処理
    }
}];
[ViewController presentViewController:twitterPostVC animated:YES completion:nil];
SLComposeViewControllerを利用して、Twitterに対し、投稿テキスト、URL、イメージを投稿しています。
投稿完了時にはイベントを受け取り、投稿のお礼メッセージや、プレゼントなど処理をします。

Lineへの投稿

frameworkは必要ないですが、テキストとイメージが別々にしか投稿できません。
また、投稿完了を受取ることができないので、利用には注意が必要です。


【簡単な説明】
text = [text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *LINEUrlString = [NSString stringWithFormat:@"line://msg/text/%@", text];
LINEに文字列を投稿するためのURLを作成します。
LINEへは「line://msg/text/(投稿したい文字列)」というURLスキーマを利用して投稿することになります。

//iOS7.0以降では共有のクリップボードを使う必要がある
UIPasteboard *pasteboard;
if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {
    pasteboard = [UIPasteboard generalPasteboard];
} else {
    pasteboard = [UIPasteboard pasteboardWithUniqueName];
}
[pasteboard setData:UIImagePNGRepresentation(image) forPasteboardType:@"public.png"];
NSString *LINEUrlString = [NSString stringWithFormat:@"line://msg/image/%@", pasteboard.name];
LINEにイメージを投稿するためのURLを作成します。
投稿にはUIPasteboardを利用します。
LINEへは「line://msg/text/(投稿イメージ名)」というURLスキーマを利用して投稿することになります。

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:LINEUrlString]]) {
LINEアプリがインストールされているか確認します。
インストールされていない場合は、LINEアプリのストアへ遷移などしてもよいかもしれません。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:LINEUrlString]];
LINEへ投稿します。
LINEは投稿完了を受け取れないため、メソッドコールと投稿完了がイコールとなります。


2015年2月4日水曜日

[cocos2dx] v3.3にAdMob SDK 6.12.2(iOS)を入れた時のリンクエラー対処

cocos2d-x v3.3にAdMob SDK 6.12.2(iOS)を入れた時にリンクエラーがわんさか出てきて焦ったのでメモ。


原因はAdMob SDK 6.12.2(iOS)を導入時にOther Linker Flagsに-ObjCを設定したことによるもののようですが、分かりにくいな。


導入時に大量のフレームワークを導入させられるわけですが、これだけでは足りず、以下の3つのフレームワークをさらに導入が必要でした。

まずは、以下を参考にたりないフレームワークを追加。
  • MediaPlayer
  • GameController (iOS6対応アプリの場合はoptional)
この辺は下記のブログを参考にさせていただきました。
cocos2d-x v3.2にiOS版AdMob SDK 6.12.0を導入した時のリンクエラーの対処

うーんこれでもエラーが消えない。
どうやらsqliteのフレームワークがないとのこと。

  • libsqlite3.0.dylib

うーん、導入ガイドに書いとけよなと思いつつ、
これらは事前に導入されていることが前提なのだろうか。。。
と考えさせられた一件でした。


    2013年3月20日水曜日

    [XCode/cocos2dx] 画面解像度対応

    iPhoneアプリはいくつか作ったけれど、ゲームが作りたくなり、しばらくまえからスマホでゲームを作ろうと四苦八苦しています。

    クロスプラットフォームを意識して、開発環境の策定に翻弄し、enchant.jsから始まりいろいろ試した結果、最終的にはやはりというかなんというかcocos2d-xに落ち着きました。物理エンジン(box2d)を利用したいです。

    これからはcocos2d-xもからめてブログを書いていきたいと思います。
    まずは解像度対応から



    cocos2dx画面解像度対応

    coco2dxのテンプレートで新規プロジェクト作成後、4-inch画面に対応するには、スプラッシュ画面(LunchImages)を設定すれば認識してくれるみたいです。


    解像度に関しては@2xが推奨されていないようで、フォルダ単位で画像を分けることになります。


    あとは、AppDelegate::applicationDidFinishLaunching{} で以下の関数を呼ぶようにすれば画面解像度には対応できました。


    この関数では、以下の2点を設定しています。
    • 開発ベースサイズの調整(480x320ベースで実装を行う(4inchのみ568x320))
    • イメージ取得フォルダの調整
    イメージは以下のそれぞれのフォルダより取得されることになります。
    • @2x -> Resources/Published-iOS/resources-iphoneh
    • 通常 -> Resources/Published-iOS/resources-iphone

    どうやら、以下の2つのメソッドは[cocos2d-2.0-x-2.0.4]にはないようで、[cocos2d-2.1beta3-x-2.1.1]にて確認がとれました。(ソース読む必要があり、ここにかなりはまった...)

        CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths);
        CCFileUtils::sharedFileUtils()->setSearchResolutionsOrder(resDirOrders);

    参考

    2012年11月3日土曜日

    [XCode] iOS 4インチスクリーン対応

    大喜利部のver1.8.0で4インチスクリーンだと画面レイアウトが崩れる不具合が発生し、早急に対応が必要になった。
    対応した方法をメモしておく。
    (もっとスマートな対応方法があれば誰か教えていただけると嬉しいです。)

    対応方法

    結論としては、どうやらコードで対応していくしかないようでした。

    まずは、[Attributes Inspector]の[Simulated Metrics]-[Size]を[Retina 4 Full Screen]に変更します。
    これにより、特定のコントロールは縦にのばして調整してくれるみたいです。
    (私のやってみた感覚ではUIView,UITavleView,UITextViewが調整されたように思います。配置によるものなのかもしれませんが。)


    これだけで調整できないものはコードでコントロール配置を調整していきます。

    ※ちなみに上記コードは「4インチスクリーン判定」の他に、「iPad判定」「Retinaディスプレイ判定」も実装されています。


    2012年10月28日日曜日

    [Objective-C] イベント通知

    イベント通知がたまにしか利用せず、少し利用しておきたいのでメモしておく。

    実装方法

    基本は次の4ステップ
     Step1.プロトコルを定義
     Step2.delegateを追加
     Step3.任意の場所でEventを返却
     Step4.利用する



    参考

    [iOS] Protocol – Delegateパターン | Objective-C イベント伝達 その1