LoginSignup
0
1

More than 5 years have passed since last update.

Unity4系→Unity5系へのバージョンアップ時にハマったことと解決策

Last updated at Posted at 2017-12-18

■PlayerSettings.applicationIdentifierが反映されない

Jenkinsを使ってバッチモードでビルドする際にデバッグモードのみアプリIDを書き換えしていたが
Unityバージョンアップ後からIDの上書きがうまく行かなくなった

PlayerSettings.applicationIdentifier = "hogehoge";

だとアクティブなプラットフォームのIDしか書き換わらなかったため

PlayerSettings.SetApplicationIdentifier(BuildTarget.iOS, "hogehoge");

とすることで任意のプラットフォームのIDの書き換えが可能

■iOSでコードの重複エラー

プロジェクトではUnityが出力するClasses配下のコードを
Assets/Plugins/iOS/UI/Keyboard.mmのように配置して上書きを行っていたが
Unity5へバージョンアップ後から上書きされずビルド時にコード重複のエラーが発生していた

PostProcessBuildとPBXProject.RemoveFileFromBuild/RemoveFileを使って
Unityのビルド後にXcodeプロジェクトを編集することでコードの重複を回避

iOSPostBuildProcess.cs
[PostProcessBuild]
public static void OnPostProcessBuild(BuildTarget buildTarget, string buidlProjectPath) {
    if (buildTarget != BuildTarget.iOS) {
        return;
    }

    // Plugins配下のファイルをコピー
    var src = Path.Combine("Libraries/Plugin/iOS/UI/Keyboard.mm");
    var dest = Path.Combine("Classes/UI/Keyboard.mm");
    File.Copy(Path.Combind(buidlProjectPath, src), Path.Combine(buidlProjectPath, dest), true);

    // Xcodeのプロジェクトからコピーしたファイルを削除
    var projectPath = Path.Combine(buidlProjectPath, "Unity-iPhone.xcodeproj/project.pbxproj");
    var project = new PBXProject();
    project.ReadFromFile(projectPath);

    var targetGuid = project.TargetGuidByName("Unity-iPhone");
    var guid = project.FindFileGuidByProjectPath(src);
    project.RemoveFileFromBuild(targetGuid, guid);
    project.RemoveFile(guid);

    project.WriteToFile(projectPath);
}

■突然Unityがクラッシュする

C:\Users\ユーザ名\AppData\Local\Unity\Editor\Editor.log
Unityがクラッシュする直前のログを見て直前に何の処理をしていたかを確認する
今回の場合
・原因 AssetBundleが古い
・対策 Unity5.6.4f1でAssetBundleの再ビルド

========== OUTPUTING STACK TRACE ==================

0x00000001414D9351 (Unity) SerializedFile::ReadMetadata<0>
0x00000001414DC7CC (Unity) SerializedFile::ReadHeader
0x00000001414DEADF (Unity) SerializedFile::FinalizeInit
0x00000001414DEF49 (Unity) SerializedFile::InitializeRead
0x0000000141098280 (Unity) PersistentManager::LoadFileStream
0x00000001408C1012 (Unity) AssetBundleLoadFromAsyncOperation::TryToLoadAndInitializeAssetBundle
0x00000001408C1D0E (Unity) AssetBundleLoadFromAsyncOperation::IntegrateMainThread
0x0000000141036868 (Unity) PreloadManager::UpdatePreloadingSingleStep
0x0000000141036BAD (Unity) PreloadManager::UpdatePreloading
0x00000001414A3DCC (Unity) PlayerCleanupCachedData
0x0000000140D89530 (Unity) PlayerLoop
0x00000001417482BE (Unity) Application::UpdateScene
0x0000000141749A8F (Unity) Application::UpdateSceneIfNeeded
0x000000014175231A (Unity) Application::TickTimer
0x000000014181D96C (Unity) CrashCallback
0x000000014181F4F4 (Unity) WinMain
0x0000000141B05BCC (Unity) strnlen
0x00000000771959CD (kernel32) BaseThreadInitThunk
0x00000000773CA561 (ntdll) RtlUserThreadStart

========== END OF STACKTRACE ===========

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1