AdMobを更新したらdoes not contain bitcodeと言われてXCodeでビルドエラーが出るようになった

だいたい以下のようなエラー文

GoogleAppMeasurement/WithoutAdIdSupport/GoogleAppMeasurement.framework/GoogleAppMeasurement(APMAdExposureReporter.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target.
file XCFrameworkIntermediates/GoogleAppMeasurement/WithoutAdIdSupport/GoogleAppMeasurement.framework/GoogleAppMeasurement' for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

ENABLE_BITCODEをNOにしたらエラーを回避できるという記事をよく見かけたけど、うまくいかず...

結論

UnityFrameworkのENABLE_BITCODEもNOにしたらうまくいった。メインターゲットだけENABLE_BITCODEをNOにするだけだとエラー回避できなかった。

Unityのビルドのポストプロセスで処理する。だいたい以下のような感じ。

public static class XcodePostProcessBuild
{
    [PostProcessBuild]
    public static void OnPostProcessBuild(BuildTarget target, string path)
    {
        if (target != BuildTarget.iOS)
        {
            return;
        }

        var project = new PBXProject();
        project.ReadFromFile(PBXProject.GetPBXProjectPath(path));

        project.SetBuildProperty(project.GetUnityMainTargetGuid(), "ENABLE_BITCODE", "NO");
        project.SetBuildProperty(project.GetUnityFrameworkTargetGuid(), "ENABLE_BITCODE", "NO");
        project.WriteToFile(PBXProject.GetPBXProjectPath(path));
        
    }
}

Notion APIでdatabaseを取得しようとするもobject_not_foundでエラーになる

curlを使って取得しようとするも、

{"object":"error","status":404,"code":"object_not_found","message":"Could not find database with ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Make sure the relevant pages and databases are shared with your integration."}

というエラーになる

どうやらかつてはIntegrationを招待するという手順だったのが、今は右上の ...から"コネクトを追加"をするように変わった模様。

チュートリアルページも古いままだったのでハマった。

UniTaskの非同期関数内で待ちたくない

こういう攻撃用のinterfaceを作って、各実装を作る時、

interface IAttackController {
    UniTask AttackAsync();
}

class NormalAttackController : IAttackController {
    public async UniTask AttackAsync()
    {
        ... //なんか非同期の処理
    }
}

オブジェクトによっては、攻撃したくないからEmptyAttackControllerってなる時がある。
その際に、

class EmptyAttackController : IAttackController {
    public UniTask AttackAsync()
    {
    }
}

っという何もしないメソッドを持つクラスを作ってみた。
しかし、これだと返り値が無いよって怒られる。

public async UniTask AttackAsync()
{
}

っと書くと、今度はawaitしてないよってwarningが出る
こんなwarning↓

warning CS1998: This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.


なので、

public async UniTask AttackAsync()
{
    await UniTask.Yield();
}

としてみたり、

public async UniTask AttackAsync()
{
    await UniTask.Delay(0);
}

としてみたりしたけど、これだと1Frame待ってしまう。

結論

public async UniTask AttackAsync()
{
    await UniTask.CompletedTask;
}

これでいけました!これなら待たないです!

Unable to get provider com.bytedance.sdk.openadsdk.multipro.TTMultiProvider というエラーで悩まされた

うちではApplovin MAXを使っているのですが、久しぶりにMAXと、その他諸々の広告SDKをアップデートしたら、起動時にエラーを吐いてすぐにアプリが落ちてしまうようになってしまいました。

対応方法

AndroidManifest.xmlから

provider android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider" ....

の部分の1行を削除したら直りました。Pangleのアプデで必要なくなった模様。

Git CloneしてきたプロジェクトでImportFBX Errors:Couldn't read file ... といったエラーが出て困った。

新しくチームに入った人のマシンでgit cloneしてきたもののプロジェクトを開くと、

Could not create asset from ...
ImportFBX Errors:Couldn't read file ...

といったエラーが出て困った。

解決方法

git LFSをinstallしてもらってCloneし直してもらったら解決した。

参考

github.com