読者です 読者をやめる 読者になる 読者になる

naichi's lab

3日後の自分(他人)への書き置き

【XCode】実機転送しようとしたらCould not find Developer Disk Image

XCode Error

f:id:naichilab:20160913221307p:plain

Unityから出力したXCodeプロジェクトを開いて、iPadに転送しようとしたらエラー。

Could not find Developer Disk Image

なんなのまじで

環境

  • 書いた日 2016/09/13
  • XCode Version 7.0.1 -> 7.3.1
  • iPad Mini2 iOS 9.3.5

確認

Finder -> XCode -> パッケージの中身を表示

f:id:naichilab:20160913221620p:plain

Contents -> Developer -> Platforms -> iPhoneOS.platform -> DeviceSupport

f:id:naichilab:20160913222215p:plain

9.3がない。

iPad最近更新されたからだと思うんよね。

いつもはXCodeの更新で解決なんだけど今日は更新ない。

どうすりゃええのん。

XCodeの謎

調べてくとXCodeは 7.3.1 が最新らしい

自分のPCに入ってるのは 7.0.1 なんだこいつ。

AppStoreでXCode探してみると、、、

f:id:naichilab:20160913223549p:plain

入ってないことになってる・・・!

8G近くある謎のXCodeを消して再インストール。

1時間かけてインストール完了。

起動したら変なエラー

f:id:naichilab:20160913232748p:plain

Unexpected code bundle “Unity4XC.xcplugin”
The “Unity4XC.xcplugin” code bundle is not provided by Apple. 
Loading code not provided by Apple can have a negative effect on the safety and stability of Xcode or related tools.

よーわからんけど Load Bundle を選択。

f:id:naichilab:20160913232931p:plain

これで冒頭のエラーは消えました!!

【Unity、adfurikun】アドフリくんSDKの導入

Unity Adfurikun XCode Cloud Build

f:id:naichilab:20160912213539p:plain

今作ってるアプリにアドフリくん使うことになったのでひっさびさにUnityに組み込んでみる。

最終的にはCloud BuildでCI回したいのでAndroid, iOS共に Build And Run だけで実機転送成功するとこまでを目指す。

(XCode開いてごにょごにょはしたくないよねって話)

まぁアドフリくんはマニュアルが充実(?)してるのでそれ見ればなんとかなる気はする。

環境

  • 書いた日 2016/09/13
  • Mac OS X El Capitan 10.11.6
  • Unity 5.4.0f3
  • adfurikunSDK_Unity_2_7.zip
  • adfurikunSDK_Unity_moviereward_2_4_1.zip
  • XCode 7.3.1

手順

Unityプロジェクトの準備

今回は試すだけなので空のUnityプロジェクトを用意。

f:id:naichilab:20160912214121p:plain:w640

  • Git管理は必須じゃないけどいつもの流れで。
  • ローカルGitリポジトリ作成する
  • .gitignoreを設定
  • Project Setting -> Editor を設定
    • Version Control -> Mode -> Visible Meta Files
    • Asset Serialization -> Mode -> Force Text

SDKダウンロード

adfurikunSDK_Unity_2_7.zip をダウンロードした。

SDKインポート

解凍して出てきた、adfurikunPlugin_googlelib/adfurikunPlugins_r2.7.unitypackage をダブルクリックでインポート。

f:id:naichilab:20160912214227p:plain

すでにAdMobとか使ってて Google Play Service SDK がUnity上に存在する場合はnogooglelibの方を使うらしい。

とりあえず何も考えず全選択で。

f:id:naichilab:20160912214430p:plain

サンプルプレハブの配置

AdfurikunUtility ってプレハブがあるのでシーンに配置。

f:id:naichilab:20160912232220p:plain

  • Banner Ad のIDだけ設定した。
  • Visible にチェック。(起動直後に広告を表示するため)

f:id:naichilab:20160912234917p:plain

Androidビルド

File -> Build Setting -> AndroidSwitch Platform する。

Player Settings -> Other Settings -> Identification -> Bundle Identifier をセット。

f:id:naichilab:20160912233308p:plain

実機つないで Build And Run

f:id:naichilab:20160912235215p:plain:w240

でた〜。簡単でいいね。

iOSビルド

File -> Build Setting -> iOSSwitch Platform する。

解凍したSDKに入っていた adfurikunsdk.frameworkPlugins/iOS に放り込む。

f:id:naichilab:20160914211914p:plain

iOSにチェックが入っていることを確認。入ってるはず。

MultipleAdViewController.mm に Compile flags -fno-objc-arc を設定

f:id:naichilab:20160914212549p:plain

さらに下記記事のスクリプトを配置

【Unity、iOS、Cloud Build】自動でEnable BitcodeをNoにする - naichi's lab

f:id:naichilab:20160914213807p:plain

Build And Run

してもXCode立ち上がってくれないので自分で開く。

実機つないでXCodeで実行

f:id:naichilab:20160914214711j:plain:w240

すんなり成功!

動画リワード用のSDKは分かれてるみたいだし次はそっち。

【Unity、iOS、Cloud Build】自動でEnable BitcodeをNoにする

Unity XCode Cloud Build Error

Unity Cloud Buildは便利なんだけどビルド通すまでがしんどいよね。

今日出たエラーのお話。

環境

  • 書いた日 2016/09/03
  • OS X El Capitan 10.11.6
  • Unity Cloud Build
    • Unity 5.4.0f3
    • Xcode 7

CloudBuildフルログ(抜粋

8424:        [xcode] ld: object contains invalid bitcode: /BUILD_PATH/hogehoge.default-ios/temp.n9diN5/build/Unity-iPhone.build/Release-iphoneos/Unity-iPhone.build/Objects-normal/armv7/hogehoge.bundle.t1TsA9/001 for architecture armv7
8425:        [xcode] clang: error: linker command failed with exit code 1 (use -v to see invocation)

BITCODE オフにしとけってやつですね。

f:id:naichilab:20160903124119p:plain

ローカルのXCodeなら手作業でもいいけどCloudBuildだとそうも行かないので自動化。

対応

下記ファイルを配置。

場所は Editor/PostBuildProcess.cs とか。Editorの下ならOK。

using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using System.Collections;
using System.IO;

public class PostBuildProcess
{
    [PostProcessBuild]
    public static void OnPostProcessBuild (BuildTarget buildTarget, string path)
    {
        if (buildTarget == BuildTarget.iOS) {
            ProcessForiOS (path);
        }
    }

    private static void ProcessForiOS (string path)
    {
        string pjPath = PBXProject.GetPBXProjectPath (path);
        PBXProject pj = new PBXProject ();
        pj.ReadFromString (File.ReadAllText (pjPath));
        string target = pj.TargetGuidByName ("Unity-iPhone");

        // Enable BitCode -> NO
        pj.SetBuildProperty (target, "ENABLE_BITCODE", "NO");

        File.WriteAllText (pjPath, pj.WriteToString ());
    }

}

これでUnity -> File -> Build And Run したときに勝手にXCodeプロジェクトファイルを編集して設定してくれる。

参考

blog.naichilab.com

【Unity、iOS、Cloud Build】TargetSDKをSimulator SDKにしておくとCloud Buildが通らない

Unity Cloud Build iOS Error

Unity Cloud Buildは便利なんだけどビルド通すまでがしんどいよね。

今日出たエラーのお話。

環境

  • 書いた日 2016/09/03
  • OS X El Capitan 10.11.6
  • Unity Cloud Build
    • Unity 5.4.0f3
    • Xcode 7

CloudBuildサマリーログ(抜粋

68:  + Building with Xcode 7.0
69:        [xcode] ** BUILD FAILED **
70: ! build of 'default-ios' failed. compile failed

CloudBuildフルログ(抜粋

6417:  + Building with Xcode 7.0
6418:        args: -sdk iphoneos PROVISIONING_PROFILE=bbd44f9a-800d-4608-886a-1cdf18f0cb5d -xcconfig /BUILD_PATH/.mason/buildpacks/xcode/bin/../libs/dSYM-Config.xcconfig
6419:        [xcode] Build settings from command line:
6420:        [xcode]     PROVISIONING_PROFILE = bbd44f9a-800d-4608-886a-1cdf18f0cb5d
6421:        [xcode]     SDKROOT = iphoneos9.0
6422:        [xcode] Build settings from configuration file '/BUILD_PATH/.mason/buildpacks/xcode/bin/../libs/dSYM-Config.xcconfig':
6423:        [xcode]     DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
6424:        [xcode]     DEPLOYMENT_POSTPROCESSING = YES
6425:        [xcode]     GCC_GENERATE_DEBUGGING_SYMBOLS = YES
6426:        [xcode]     SEPARATE_STRIP = YES
6427:        [xcode]     STRIP_INSTALLED_PRODUCT = YES
6428:        [xcode] === BUILD TARGET Unity-iPhone OF PROJECT Unity-iPhone WITH THE DEFAULT CONFIGURATION (Release) ===
6429:        [xcode] Check dependencies
6430:        [xcode] No architectures to compile for (ARCHS=x86_64, VALID_ARCHS=arm64 armv7 armv7s).
6431:        [xcode] ** BUILD FAILED **
6432:        [xcode] The following build commands failed:

下記箇所が怪しい。

6430:        [xcode] No architectures to compile for (ARCHS=x86_64, VALID_ARCHS=arm64 armv7 armv7s).

自分のPCだと x86_64 になってる。

f:id:naichilab:20160903120608p:plain

あーそういえばMacで動作確認するために Simulator SDK に設定したな。と。

それかな。

対応

Unity -> Build Settings -> iOS -> Player Settings 

Other Settings -> Configuration -> Target SDK

これを Device SDK にする。

f:id:naichilab:20160903120720p:plain

ローカルのXCodeで確認。

f:id:naichilab:20160903120618p:plain

変わった。

Cloud Buildは通らなかったけどエラーが変わったのでこの問題はとりあえず解決。

【iOS】この証明書の発行者は無効です

iOS XCode

f:id:naichilab:20160831003245p:plain

下記記事の通り、iOS Distribution用の証明書を発行して、

blog.naichilab.com

キーチェーンに登録しても

この証明書の発行者は無効です

f:id:naichilab:20160831001958p:plain

なんでやねーん。

今作ったとこやぞ!と。

どうも中間証明書の有効期限が切れてたみたいです。

期限切れの中間証明書を削除する

キーチェーンアクセス -> 表示 -> 有効期限の切れた証明書を表示

f:id:naichilab:20160831002346p:plain

もし Apple Worldwide Developer Relations Certification Authority に赤いバツがついてたらビンゴ。

右クリックして削除。

新しい中間証明書をインストールする

Apple PKI

上記ページから、新しい方のWWDR Certificateをダウンロード(02/07/23の方)

ダブルクリックしてキーチェーンに保存。

解決。

f:id:naichilab:20160831003104p:plain

【Unity、iOS】AdMob入れたらModule 'GoogleMobileAds' not found.が消せなくて困った。

Unity XCode Error AdMob Cloud Build

f:id:naichilab:20160829234329p:plain:w160

タイトルの通り。

AdMobをiOS用にビルドしようとしたらハマったのでメモ。

環境

  • 書いた日 2016/08/29
  • OS X El Capitan 10.11.6
  • Unity 5.4.0f3

エラー内容

unityから出力したxcodeprojを開き、ビルドすると下記エラー。

xxx/Libraries/Plugins/iOS/GADUNativeCustomTemplateAd.h:4:9: Module 'GoogleMobileAds' not found

GoogleDevelopersに書いてある通りに Add Files to "Unity-iPhone"... から GoogleMobileAds.frameworkを追加してもエラー。

くそう!

解決方法1

下記手順に従ってSDKを追加する際に、

iOS クイック スタート  |  AdMob iOS ガイド  |  Google Developers

Add Files to "Unity-iPhone"... でSDKを選択するウィンドウがある。

そのウィンドウでOptionsを開き、Copy items if neededにチェックを入れること!!

f:id:naichilab:20160829232239p:plain

これがオフだと何をどうしようが not foundエラーになる。

上記サイトにはOptionsが載ってないから最近のXCodeで追加されたんだろうね・・・

解決策2(Unity Cloud Build にも対応)

そもそもunityでビルドするたびにXCode触りたくない人向け。

最初からこの方法でやっときなさいって感じですね。

unity側で Plugins/iOSGoogleMobileAds.frameworkを放り込む。

f:id:naichilab:20160829233906p:plain

終わり。

あっけないので補足。

unity上で追加したframeworkを選択した時、Inspectorウィンドウがこんな感じになってること。

f:id:naichilab:20160829234007p:plain

iOSにチェックが入っていればOK。

これだけでunityが吐き出すXCodeプロジェクトにframeworkが含まれた状態になる。

f:id:naichilab:20160829233502p:plain

あぁ無駄な時間つかった・・・

個人用のロゴ作った

Illustrator

前から作ろうとして放置してた個人用のロゴを完成させた。

アイデアは @matsukesoft さん。

前に相談したらサラッと書いてくれた。いつもありがとうございます。

それを微調整していい感じになったので完成。

f:id:naichilab:20160828225344p:plain:w320

f:id:naichilab:20160828225354p:plain:w320

別に隠すもんでもないし ai ファイルもGitHubで公開した。

github.com

公開はしたけど無断利用はしないでね。