2014/11/27

[iOS][Objective-C]ld: warning: directory not found for optionというエラー

コンパイルしたら警告として

ld: warning: directory not found for option ・・・
的なエラーが発生したので、調査することに。

超便利な回答として、‘ld: warning: directory not found for option’を発見して、

それによると以下の、二通りの解釈があるそうです。
ld: warning: directory not found for option '-L・・・'
の場合は、「TARGETS」→「Build Settings」→「Library Search Paths」で不要なパスを削除する。
ld: warning: directory not found for option '-F・・・'
の場合は、「TARGETS」→「Build Settings」→「Frameworks Search Paths」で不要なパスを削除する。
で確かに、それ通りに試したら、警告が発生しなくなりました。

2014/11/26

[GoogleAppEngine][Python]Multitenancyを使ってみる

少し前に、dispatch.yamlでモジュールの切り替え作業の方法を書きましたが、この延長線上でMultitenancyを使ってみたいと思います。

まだローカル環境でしか試したことがないのですが、少なくともDataStoreにおいては下記のように設定したらNamespaceで管理できました。

from google.appengine.api import namespace_manager
namespace = namespace_manager.get_namespace()
namespace_manager.set_namespace('-hoge-')
たったこんだけで、わけることができるので、便利ですねー。

2014/11/25

[iOS][Objective-C]CocoaPodsを導入

毎回、毎回、ライブラリをgitからダウンロードして、プログラムをし、また、最新版のプログラムが配信されたら、同じことの繰り返し。

ちょっとめんどくせぇーなーっと思って、COCOAPODSを導入してみることに。

基本的には、iOSライブラリ管理の神ツール「CocoaPods」のインストールと使い方を読みながら導入したわけですが、のっけからつまづくことに。

ターミナルで、

sudo gem install cocoapods
をうったんだけど、何も起きない。

うんともすんとも言わない。

超困ったので、
sudo gem install cocoapods -V
でインストール

進捗が確認できるので、こっちの方がいいかも。

その後、すかさず、
pod setup
を実行し、「.xcodeproj」ファイルと同じディレクトリ上に「Podfile」を作成し、いざ、
pod install
したら、今度は、

[!] The `プロジェクト名 [Debug]` target overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Target Support Files/Pods/Pods.debug.xcconfig'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

[!] The `プロジェクト名 [Release]` target overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Target Support Files/Pods/Pods.release.xcconfig'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.
がでてきて、「TARGET」→「Build Settings」→「Linking」→「Other Linker Flags」に「$(inherited)」を追加して、初めて、コンパイルが正常に通りました。

参考:Using cocoaPods for google AdMob SDK

長かったなー、ここまでの道のり。

2014/11/24

[iOS][Objective-C]AFNetworkingを使ってみる

昨日の64Bit対応でHTTPのmultipart/form-dataのやりとりで一部警告がでてたので、これを機に、AFNetworkingに差し替えてみる。

リファレンスにはなかったですが、まず最初に使うには、

#import "AFNetworknig.h"
を入れる必要があるので、注意が必要です。

後、コンパイルするときに、エラーがでちゃって、同じなやみを抱えている人が
Error in adding AFNetworking framework in the project
で相談していて、
MobileCoreServices.framework
SystemConfiguration.framework
上の二つのライブラリが必要みたいです。

実際に、追加したら、コンパイルエラーが取れました。

で、いざ、リクエストを飛ばしたら、今度は、パースエラーが発生して、どうしたもんかなーっとぐぐっていたら、

Request failed: unacceptable content-type: text/html using AFNetworking 2.0
というのが、あって、結果的に、
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
としたら無事にパースできた。

完全導入までに結構、時間がかかりました。

2014/11/23

32に

なってしもーた。

まだ何もなしとげてない、自分に嫌気がさす。

焦りばかり。

2014/11/22

[iOS][Objective-C]64Bit対応までの道のり

2015年2月には、64bit対応しろとappleに言われてしまったので、対応することに。

64-Bit Transition Guide for Cocoa Touchを読みながら、Xcodeの設定を変えようとしたのですが、結果、答えがわからず、

「TARGET」→「Build Settings」→「Architectures」→「Valid Architectures」を

「arm64 armv7 armv7s」

と設定しただけなんだけど。

これでいいのだろうか?

2014/11/21

[Objective-C][iOS][Google]Google plus SDKで個人情報を取得

Google plus SDKを使って認証する方法を書きましたが、それをもとに、自分の情報を取得するには、どうすればいいのだろうか?

- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth error: (NSError *) error {
    //errorがある場合、ない場合は、nilを返す
    if(error){
      return
    }

    GTLServicePlus* plusService = [[GTLServicePlus alloc] init];
    plusService.retryEnabled = YES;
    [plusService setAuthorizer:[GPPSignIn sharedInstance].authentication];

    GTLQueryPlus *query = [GTLQueryPlus queryForPeopleGetWithUserId:@"me"];
    [plusService executeQuery:query
        completionHandler:^(GTLServiceTicket *ticket,
                            GTLPlusPerson *person,
                            NSError *error) {
            if (error) {
                GTMLoggerError(@"Error: %@", error);
            } else {
                //person.displayName
                //person.identifer
             }
    }];
}

2014/11/20

[Objective-C][iOS][Google]Google plus SDKでサインインせずに共有

ログインないしサインインせずにGoogle plusに情報を共有できるGPPShareBuilderを読みながら写真(画像)も共有できるのかなーっと思って調べてみたんだけど、できないっぽい。

プログラム途中で書いたのになー。

2014/11/19

[iOS][Objective-C]Google plus SDKとFacebook SDKを共存させる

Google plus SDKもFacebook SDKもともにログインする時に下記のメソッドにお世話になります。

- (BOOL)application: (UIApplication *)application openURL: (NSURL *)url sourceApplication: (NSString *)sourceApplication annotation: (id)annotation
Googleの場合
- (BOOL)application: (UIApplication *)application
            openURL: (NSURL *)url
  sourceApplication: (NSString *)sourceApplication
         annotation: (id)annotation {
 return [GPPURLHandler handleURL:url
               sourceApplication:sourceApplication
                      annotation:annotation];
}
Facebookの場合
- (BOOL)application:(UIApplication *)application
            openURL: (NSURL *)url
  sourceApplication: (NSString *)sourceApplication
         annotation: (id)annotation {

        BOOL wasHandled = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
        return wasHandled;
}
でもろどかぶりしているので、どうすればいいのかなーっと検索していたら、Handling openURL: with Facebook and Googleというエントリーを発見して、下記のようにすれば問題なく解決することができました。
- (BOOL)application:(UIApplication *)application
            openURL: (NSURL *)url
  sourceApplication: (NSString *)sourceApplication
         annotation: (id)annotation {
    if ([[url absoluteString] rangeOfString:@""].location == NSNotFound){
        BOOL wasHandled = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
        return wasHandled;
    }else{
        return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
    }
}

2014/11/18

[iOS][Objective-C]Google plus SDKを使ってログアウト

昨日のエントリーでGoogle plus SDKを使って認証(ログイン)する方法を書きました。

で今回は、ログアウトをする方法なのですが、これは簡単、以下、一文で終了します。

[[GPPSignIn sharedInstance] signOut];