UnityでPostprocessBuildPlayerを使ってXcodeに外部frameworkを取り込んでみた

情報が既出してあったので自分が作成したSampleも書いておく。
最近はUnityのコンパイルサーバー作ってAssetBundleも一緒に出力したり、課金処理書いたりしてます。

  • Assets/Editor に下記2ファイルを設置
#!/usr/bin/env python

from mod_pbxproj import XcodeProject
import sys
import os
import os.path

selfpath = sys.argv[0]
installpath = sys.argv[1]
target = sys.argv[2]
print "Postprocess Build Target: " + target + "\n" 
buildpath = os.path.join(os.path.dirname(selfpath),'../../Builds')

if target == "iPhone":
    projpath = installpath + "/Unity-iPhone.xcodeproj/project.pbxproj" 
    print ".pbxproj " + projpath + "\n";
    project = XcodeProject.Load(projpath)

    project.add_file(buildpath + '/Nakamap.framework')

    if project.modified:
        project.backup()
        project.save()

    cmd = '/usr/libexec/PlistBuddy -c "Add CFBundleURLTypes:0:CFBundleURLSchemes:0 string nakamapId" ' + buildpath + '/info.plist'
    os.system(cmd)

あと、Assets/BuildsフォルダはUnityに取り込まれないのでframeworkはそこに置く事にした。

2013/06/01追記

project.pbxprojのFRAMEWORK_SEARCH_PATHSを追加しないと外部フレームワークが機能しなかった。
mod_pbxproj.pyを一部修正して対応した。

調べたところ、mod_pbxproj.pyのFRAMEWORK_SEARCH_PATHS対応版もあることが解った。
https://github.com/OpenKit/openkit-unity/blob/master/Assets/Plugins/OpenKit/PostbuildScripts/mod_pbxproj.py
https://github.com/kronenthaler/mod-pbxproj/blob/master/mod_pbxproj.py