[Hockeyapp]crash reportingを実装する(Android・iOS)


HockeyappSDKが4以降になってから
実装方法が大きく変わっているよう

# Android

#### 1. Edit build.gradle

```
...

repositories {
	jcenter()
}
...

android {
	...
	
	dependencies {
		compile 'net.hockeyapp.android:HockeySDK:4.1.1'
	}
	
	...
	
	defaultConfig {
		manifestPlaceholders = [HOCKEYAPP_APP_ID: "${APP_ID}"]
	}

	...
}
```

ちなみにAPP_IDはこの部分のこと

![hockeyapp_app_id.png](https://qiita-image-store.s3.amazonaws.com/0/132627/ddabe641-78d0-c007-5aca-651f7a6372ab.png "hockeyapp_app_id.png")


#### 2. Edit AndroidManifest.xml

```
...
	<application android:label="@string/app_name" android:icon="@drawable/icon" android:largeHeap="true">
		...
		
		<meta-data android:name="net.hockeyapp.android.appIdentifier" android:value="${HOCKEYAPP_APP_ID}" />
		
		...
	</application>
...
```

#### 3. Edit AppActivity.java

```
import net.hockeyapp.android.CrashManager;
import net.hockeyapp.android.UpdateManager;

public class AppActivity extends Cocos2dxActivity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Your own code to create the view
    // ...

    checkForUpdates();
  }

  @Override
  public void onResume() {
    super.onResume();
    // ... your own onResume implementation
    checkForCrashes();
  }

  @Override
  public void onPause() {
    super.onPause();
    unregisterManagers();
  }

  @Override
  public void onDestroy() {
    super.onDestroy();
    unregisterManagers();
  }

  private void checkForCrashes() {
    CrashManager.register(this);
  }

  private void checkForUpdates() {
    // Remove this for store builds!
    UpdateManager.register(this);
  }

  private void unregisterManagers() {
    UpdateManager.unregister();
  }

}
```

#### Crash for test

意図的にクラッシュさせて疎通確認をする

```
void PlatformUtils::doCrash()
{
	auto CLASS_NAME_COCOS2DHELPER = "org/cocos2dx/lib/Cocos2dxHelper";
    
    JniMethodInfo t;
    
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME_COCOS2DHELPER, "throwException", "()V")) {
        t.env->CallStaticVoidMethod(t.classID, t.methodID);
        
        t.env->DeleteLocalRef(t.classID);
    }
}
```

# iOS

#### 1. Download SDK

以下のボタンからSDK組み込みのヘルプページに遷移する

![hockeyapp_download.png](https://qiita-image-store.s3.amazonaws.com/0/132627/fde4a5a4-bca0-4aae-9099-a371431d33ec.png "hockeyapp_download.png")

遷移した先の以下のボタンから
SDKをダウンロード

![hockeyapp_downloadbutton.png](https://qiita-image-store.s3.amazonaws.com/0/132627/50a65ba6-8767-109e-942a-5248fc694d4c.png "hockeyapp_downloadbutton.png")

#### 2. Extract Framework and bundle

ダウンロードしたフォルダから
`HockeySDK.embeddedframework`を
`proj.ios_mac/Frameworks`にコピー
(どこでも良い)

Xcodeを開き、
`HockeySDK.framework`->Frameworksグループ
`Resources/HockeySDKResources.bundle`->Resourcesグループ
にそれぞれ追加する

#### 3. Add some frameworks

以下のフレームワークのリンクを追加する

##### Link Binary With Libraries

- AssetsLibrary.framework
- CoreGraphics.framework
- CoreText.framework
- Foundation.framework
- MobileCoreServices.framework
- QuartzCore.framework
- QuickLook.framework
- Security.framework
- SystemConfiguration.framework
- UIKit.framework
- libc++.tbd


#### 4. Edit AppController.mm

```
...

#import <HockeySDK/HockeySDK.h>

...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
	[[BITHockeyManager sharedHockeyManager] configureWithIdentifier:@"APP_ID"];
	[[BITHockeyManager sharedHockeyManager] startManager];
	[[BITHockeyManager sharedHockeyManager].authenticator authenticateInstallation];
	
	...
}
```

#### 5. Crash for test

意図的にクラッシュさせて疎通確認をする

```
PlatformUtils::doCrash()
{
	@throw [NSException exceptionWithName:NSGenericException reason:@"crash for test" userInfo:nil];
}