[Android] エラー「ビルド・パスが不完全であるため、プロジェクトはビルドされませんでした。」

Eclipse での Android アプリ開発でよく発生するエラーの解決方法をメモ。

エラーメッセージ
ビルド・パスが不完全であるため、プロジェクトはビルドされませんでした。

解決方法
1. プロジェクトのプロパティ →「Javaのビルドパス」→「順序およびエクスポート」→「AndroidX.X」にチェックを入れて「OK」をクリック
2. ビルド

[Linux]ドメインの TXT レコードを nslookup -q=txt コマンドで確認する

ドメインの TXT レコードは nslookup コマンドに -q=txt オプションを付けて、確認する方法をご紹介します。

Linux

続きを読む

[iOS] ReleaseビルドでNSLogを出力させない設定方法

iOS アプリで、ReleaseビルドでNSLogを出力させない設定方法

アプリ名-Prefix.pch ファイルに下記を定義すればOKです。

#ifdef DEBUG
#   define NSLog(...) NSLog(__VA_ARGS__)
#else 
#   define NSLog(...)
#endif

ちなみに、DEBUG のON/OFFの切り替えは下記の画像のように「PROJECT > Build Settings > Apple LLVM compiler 4.2 – Preproessing」で設定します。

ios-debug-off

以上です。

[参考]

objective c – Enable and Disable NSLog in DEBUG mode – Stack Overflow

[iOS] UIScrollView や UITableView のスクロール停止・禁止の設定方法

iOS アプリ開発で、UIScrollView や UITableView のスクロール操作を禁止にする設定方法をご紹介します。

iOS Development

続きを読む

[iOS] Facebook エラー:The Facebook server could not fulfill this access request: The app must ask for a basic read permission at install time.

Facebook iOS SDK version 3.5.1 で Facebook 認証を実装したらエラーが発生しました。

エラーログ

error:Error Domain=com.facebook.sdk Code=2
“The operation couldn’t be completed. (com.facebook.sdk error 2.)”
UserInfo=0x1e8b2740 {com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:SystemLoginCancelled, com.facebook.sdk:ErrorInnerErrorKey=Error Domain=com.apple.accounts
Code=7 “The Facebook server could not fulfill this access request: The app must ask for a basic read permission at install time.”
UserInfo=0x1ddf1eb0 {NSLocalizedDescription=
The Facebook server could not fulfill this access request: The app must ask for a basic read permission at install time.
}, com.facebook.sdk:ErrorSessionKey=, expirationDate: (null), refreshDate: (null), attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(null)>}

最初、以下のように openActiveSessionWithPublishPermissions で、publish_actions だけ取得しようとしていたのですが「The app must ask for a basic read permission at install time.」というエラーメッセージの通り、まず basic profile information を取得する必要があるそうです。

+ (void)connectWithCompletionHandler:(void(^)(FBSession *session, FBSessionState status, NSError *error))handler {
    NSLog(@"Connection");
    if ([[FBSession activeSession] isOpen]) {
        NSLog(@"Logout");
        [[FBSession activeSession] closeAndClearTokenInformation];
    }
 
    // Request publish permissions
    NSArray *publishPermissions = [NSArray arrayWithObjects:@"publish_actions", nil];
    [FBSession openActiveSessionWithPublishPermissions:publishPermissions
                                       defaultAudience:FBSessionDefaultAudienceFriends
                                          allowLoginUI:YES
                                     completionHandler:handler];
}

なので、下記のように先に openActiveSessionWithReadPermissions を呼び出せばOKです。

+ (void)connectWithCompletionHandler:(void(^)(FBSession *session, FBSessionState status, NSError *error))handler {
    NSLog(@"Connection");
    if ([[FBSession activeSession] isOpen]) {
        NSLog(@"Logout");
        [[FBSession activeSession] closeAndClearTokenInformation];
    }
 
    // Request basic profile information
    // 基本情報で必要なものがある場合、指定する
    // NSArray *readPermissions = [NSArray arrayWithObjects:@"email", @"user_birthday", nil];
    NSArray *readPermissions = nil;
    [FBSession openActiveSessionWithReadPermissions:readPermissions
                                       allowLoginUI:NO
                                  completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                                      /* handle success + failure in block */
                                  }];
 
    // Request publish permissions
    NSArray *publishPermissions = [NSArray arrayWithObjects:@"publish_actions", nil];
    [FBSession openActiveSessionWithPublishPermissions:publishPermissions
                                       defaultAudience:FBSessionDefaultAudienceFriends
                                          allowLoginUI:YES
                                     completionHandler:handler];
}

[参考]

Facebook iOS SDK3.5で投稿処理を行う際の流れ(その2) – assaulter's diary

[iOS] アプリ名の設定方法

iPhone/iPad アプリの名前を設定する項目をメモ。

iPhoneアプリ開発: アプリの名前に関する設定項目まとめ | 情熱とスキルと市場

[iOS] アプリへ外部フォントを埋め込む方法

iPhone/iPad などの iOS アプリへ外部フォントを埋め込む方法をメモ。

デフォルトで搭載されているFont

iOSに搭載されているフォントを確認できるサイト
iOS Fonts

iOSアプリへ外部フォントを埋め込む方法

iPhoneアプリへの外部フォントの埋め込み | Albatrus Blog

ゆず屋: [フォント] iPhone & iPhoneアプリのフォント

[Objective-C] switch 文で Expected expression エラー

Objective-C の switch 文で Expected expression エラーが発生しました。

switch(i){
    case 0:
        int spam = 0;
        break;
    default:
        break;
}

case の中で変数宣言すると Expected expression エラーが出るので、以下のように変数宣言を switch文の外に書くとエラーが出なくなります。

int spam;
 
switch(i){
    case 0:
        spam = 0;
        break;
    default:
        break;
}

[参考]

Expected expressionというエラーがでる | 人生休暇中

[Xcode] Archive が選択できない問題の解決方法

Xcode4 で Archive が選択できない問題が発生しました。

解決方法は [Scheme] を [iOS Device] など実機の項目に選択するだけです。

これで、[Product] > [Archive] が選択できるようになります。

[参考]

Xcode4でArchiveが選択できない | 6oolab

[Android][iOS] Parse.com で REST API 経由で Push 通知

Android や iOS アプリに、Parse.com で REST API 経由で Push 通知するには下記のような感じです。

curl -X POST \
  -H "X-Parse-Application-Id: xxxxxx" \
  -H "X-Parse-REST-API-Key: xxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
        "where": {
          "deviceType": "ios"
        },
        "data": {
          "alert": "Hello World!"
        }
      }' \
  https://api.parse.com/1/push

[参考]

REST API | Parse