1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Xcode11でoF0.9.8を楽に動かす話

Last updated at Posted at 2019-11-13

重要項目

「取り敢えず動いた」って状態なのでこれ試してもダメだった場合はごめんなさい.

初めに

Xcode11からCodeSigningがゴニョゴニョで怒られるようになりましたね.
oFのmaster(2019/11/13時点)はそこら辺きちんとやってくれるようになってるのですが悲しいかなまだaddonの関係でoF0.9.8を使わなきゃいけないことも多々あります.

Xcode10系が使えるのならそっちで良いのですがMojaveの変なバグ踏んだりなんだかんだでXcode10系が使えない方(観測例1)も居るようで...

そんなあなたに朗報. (多分)Xcode11でも動かせます.

最初にやること

Xcode10以降でoF 0.9.8を使わなきゃいけない場合 を参考にやることをやってください.

CodeSigning周り

最新の奴からパクッて来ましょう.
Build Phases の最後に Run Script を追加して以下をコピペ.

echo "$GCC_PREPROCESSOR_DEFINITIONS";
APPSTORE=`expr "$GCC_PREPROCESSOR_DEFINITIONS" : ".*APPSTORE=\([0-9]*\)"`
if [ -z "$APPSTORE" ] ; then
echo "Note: Not copying bin/data to App Package or doing App Code signing. Use AppStore target for AppStore distribution";
else
# Copy bin/data into App/Resources
rsync -avz --exclude='.DS_Store' "${SRCROOT}/bin/data/" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/data/"

# ---- Code Sign App Package ----

# WARNING: You may have to run Clean in Xcode after changing CODE_SIGN_IDENTITY!

# Verify that $CODE_SIGN_IDENTITY is set
if [ -z "${CODE_SIGN_IDENTITY}" ] ; then
echo "CODE_SIGN_IDENTITY needs to be set for framework code-signing"
exit 0
fi

if [ -z "${CODE_SIGN_ENTITLEMENTS}" ] ; then
echo "CODE_SIGN_ENTITLEMENTS needs to be set for framework code-signing!"

if [ "${CONFIGURATION}" = "Release" ] ; then
exit 1
else
# Code-signing is optional for non-release builds.
exit 0
fi
fi

ITEMS=""

FRAMEWORKS_DIR="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
echo "$FRAMEWORKS_DIR"
if [ -d "$FRAMEWORKS_DIR" ] ; then
FRAMEWORKS=$(find "${FRAMEWORKS_DIR}" -depth -type d -name "*.framework" -or -name "*.dylib" -or -name "*.bundle" | sed -e "s/\(.*framework\)/\1\/Versions\/A\//")
RESULT=$?
if [[ $RESULT != 0 ]] ; then
exit 1
fi

ITEMS="${FRAMEWORKS}"
fi

LOGINITEMS_DIR="${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Library/LoginItems/"
if [ -d "$LOGINITEMS_DIR" ] ; then
LOGINITEMS=$(find "${LOGINITEMS_DIR}" -depth -type d -name "*.app")
RESULT=$?
if [[ $RESULT != 0 ]] ; then
exit 1
fi

ITEMS="${ITEMS}"$'\n'"${LOGINITEMS}"
fi

# Prefer the expanded name, if available.
CODE_SIGN_IDENTITY_FOR_ITEMS="${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
if [ "${CODE_SIGN_IDENTITY_FOR_ITEMS}" = "" ] ; then
# Fall back to old behavior.
CODE_SIGN_IDENTITY_FOR_ITEMS="${CODE_SIGN_IDENTITY}"
fi

echo "Identity:"
echo "${CODE_SIGN_IDENTITY_FOR_ITEMS}"

echo "Entitlements:"
echo "${CODE_SIGN_ENTITLEMENTS}"

echo "Found:"
echo "${ITEMS}"

# Change the Internal Field Separator (IFS) so that spaces in paths will not cause problems below.
SAVED_IFS=$IFS
IFS=$(echo -en "\n\b")

# Loop through all items.
for ITEM in $ITEMS;
do
echo "Stripping invalid archs '${ITEM}'"
lipo -remove i386 "${ITEM}" -o "${ITEM}"
echo "Signing '${ITEM}'"
codesign --force --verbose --sign "${CODE_SIGN_IDENTITY_FOR_ITEMS}" --entitlements "${CODE_SIGN_ENTITLEMENTS}" "${ITEM}"
RESULT=$?
if [[ $RESULT != 0 ]] ; then
echo "Failed to sign '${ITEM}'."
IFS=$SAVED_IFS
exit 1
fi
done

# Restore $IFS.
IFS=$SAVED_IFS

fi

そして, Build Settings

  • Code Sign IdentitySign to Run Locally
  • Other Code Signing Flags--deep
    に設定しましょう.

ついでに, Info

  • Key: Privacy - Microphone Usage Description
    • Value: 適当な文言
  • Key: Privacy - Camera Usage Description
    • Value: 適当な文言
      を追加.

これでビルドが通るはず.

PG対応

ここまで来たらPGで作ったらこの状態になって欲しい!
ということで scripts/template/osx/ を修正しましょう.
ただ, この頃のxcodeprojの中身はXMLで記述されており, 最新のXcodeで開くと諸々がjsonライクなファイルに変わってしまいPGが読めなくなってしまいます.
ですので素直にテキストエディタで開くことにします.

emptyExample.xcodeprojパッケージの内容を表示 で中に入ります. その先に見える project.pbxproj が本体です. 好きなテキストエディタで開きましょう.

まずは Run Script の追加から.

PBXShellScriptBuildPhase で検索すると rsync でファイルコピーをするフェイズが見つかります. スクリプト自体は shellScript のキーで string としてベタ書きされてますね.

		<key>E4B6FFFD0C3F9AB9008CF71C</key>
		<dict>
			<key>buildActionMask</key>
			<string>2147483647</string>
			<key>files</key>
			<array/>
			<key>inputPaths</key>
			<array/>
			<key>isa</key>
			<string>PBXShellScriptBuildPhase</string>
			<key>outputPaths</key>
			<array/>
			<key>runOnlyForDeploymentPostprocessing</key>
			<string>0</string>
			<key>shellPath</key>
			<string>/bin/sh</string>
			<key>shellScript</key>
			<string>mkdir -p "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/"
# Copy default icon file into App/Resources
rsync -aved "$ICON_FILE" "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/"
# Copy libfmod and change install directory for fmod to run
rsync -aved ../../../libs/fmodex/lib/osx/libfmodex.dylib "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/";
install_name_tool -change @executable_path/libfmodex.dylib @executable_path/../Frameworks/libfmodex.dylib "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME";
# Copy GLUT framework (must remove for AppStore submissions)
rsync -aved ../../../libs/glut/lib/osx/GLUT.framework "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/"
</string>
		</dict>

これでひとかたまりです.
これを真似ましょう.

この部分の直下にまずまるっとコピペします.
その後, key を適当に被らないように変更します.
ここではコピー元のE4B6FFFD0C3F9AB9008CF71C を1増やして E4B6FFFD0C3F9AB9008CF71D にしましょう.
そしてスクリプト部分に上の Run Script を追加のところで書いたスクリプトをコピーします.

しかしこれだけだと反映されません. これからこれを Build Phases と紐付けなければいけません.
そのためには key が怪しげです. E4B6FFFD0C3F9AB9008CF71C を検索してみましょう.
もう一件見つかりますね.

			<key>buildPhases</key>
			<array>
				<string>E4B69B580A3A1756003C02F2</string>
				<string>E4B69B590A3A1756003C02F2</string>
				<string>E4B6FFFD0C3F9AB9008CF71C</string>
				<string>E4C2427710CC5ABF004149E2</string>
			</array>

如何にも怪しげです. Build Phases の最後に追加したいので最後にエイヤッと E4B6FFFD0C3F9AB9008CF71D を追加しましょう.

			<key>buildPhases</key>
			<array>
				<string>E4B69B580A3A1756003C02F2</string>
				<string>E4B69B590A3A1756003C02F2</string>
				<string>E4B6FFFD0C3F9AB9008CF71C</string>
				<string>E4C2427710CC5ABF004149E2</string>
				<string>E4B6FFFD0C3F9AB9008CF71D</string>
			</array>

これで Run Script は反映されました.

Code Signing周り

次はCode Signing周りも追加したいですね.
しかしここらへんは0.9.8のバージョンには存在しません...
雰囲気で変えていきましょう.
nightlyの方の project.pbxproj--deep で検索してみると

		<key>99FA3DBB1C7456C400CFA0EE</key>
		<dict>
			<key>baseConfigurationReference</key>
			<string>E4EB6923138AFD0F00A09F29</string>
			<key>buildSettings</key>
			<dict>
				<key>CONFIGURATION_BUILD_DIR</key>
				<string>$(SRCROOT)/bin/</string>
				<key>COPY_PHASE_STRIP</key>
				<string>YES</string>
				<key>DEAD_CODE_STRIPPING</key>
				<string>YES</string>
				<key>GCC_AUTO_VECTORIZATION</key>
				<string>YES</string>
				<key>GCC_ENABLE_SSE3_EXTENSIONS</key>
				<string>YES</string>
				<key>GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS</key>
				<string>YES</string>
				<key>GCC_INLINES_ARE_PRIVATE_EXTERN</key>
				<string>NO</string>
				<key>GCC_OPTIMIZATION_LEVEL</key>
				<string>3</string>
				<key>GCC_PREPROCESSOR_DEFINITIONS[arch=*]</key>
				<string>DISTRIBUTION=1</string>
				<key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
				<string>NO</string>
				<key>GCC_UNROLL_LOOPS</key>
				<string>YES</string>
				<key>GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS</key>
				<string>YES</string>
				<key>GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO</key>
				<string>NO</string>
				<key>GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL</key>
				<string>NO</string>
				<key>GCC_WARN_UNINITIALIZED_AUTOS</key>
				<string>NO</string>
				<key>GCC_WARN_UNUSED_VALUE</key>
				<string>NO</string>
				<key>GCC_WARN_UNUSED_VARIABLE</key>
				<string>NO</string>
				<key>HEADER_SEARCH_PATHS</key>
				<array>
					<string>$(OF_CORE_HEADERS)</string>
					<string>src</string>
				</array>
				<key>MACOSX_DEPLOYMENT_TARGET</key>
				<string>10.9</string>
				<key>OTHER_CODE_SIGN_FLAGS</key>
				<string>--deep</string>
				<key>OTHER_CPLUSPLUSFLAGS</key>
				<array>
					<string>-D__MACOSX_CORE__</string>
					<string>-mtune=native</string>
				</array>
				<key>SDKROOT</key>
				<string>macosx</string>
			</dict>
			<key>isa</key>
			<string>XCBuildConfiguration</string>
			<key>name</key>
			<string>AppStore</string>
		</dict>

こんな感じの場所が見つかりますね. これは怪しい.

ということで今度はXML風の奴で CONFIGURATION_BUILD_DIR とかで検索してみると

		<key>E4B69B4E0A3A1720003C02F2</key>
		<dict>
			<key>baseConfigurationReference</key>
			<string>E4EB6923138AFD0F00A09F29</string>
			<key>buildSettings</key>
			<dict>
				<key>CONFIGURATION_BUILD_DIR</key>
				<string>$(SRCROOT)/bin/</string>
				<key>COPY_PHASE_STRIP</key>
				<string>NO</string>
				<key>DEAD_CODE_STRIPPING</key>
				<string>YES</string>
				<key>GCC_AUTO_VECTORIZATION</key>
				<string>YES</string>
				<key>GCC_ENABLE_SSE3_EXTENSIONS</key>
				<string>YES</string>
				<key>GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS</key>
				<string>YES</string>
				<key>GCC_INLINES_ARE_PRIVATE_EXTERN</key>
				<string>NO</string>
				<key>GCC_OPTIMIZATION_LEVEL</key>
				<string>0</string>
				<key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
				<string>NO</string>
				<key>GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS</key>
				<string>YES</string>
				<key>GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO</key>
				<string>NO</string>
				<key>GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL</key>
				<string>NO</string>
				<key>GCC_WARN_UNINITIALIZED_AUTOS</key>
				<string>NO</string>
				<key>GCC_WARN_UNUSED_VALUE</key>
				<string>NO</string>
				<key>GCC_WARN_UNUSED_VARIABLE</key>
				<string>NO</string>
				<key>MACOSX_DEPLOYMENT_TARGET</key>
				<string>10.8</string>
				<key>ONLY_ACTIVE_ARCH</key>
				<string>YES</string>
				<key>OTHER_CPLUSPLUSFLAGS</key>
				<array>
					<string>-D__MACOSX_CORE__</string>
					<string>-mtune=native</string>
				</array>
				<key>SDKROOT</key>
				<string>macosx</string>
			</dict>
			<key>isa</key>
			<string>XCBuildConfiguration</string>
			<key>name</key>
			<string>Debug</string>
		</dict>

こんな感じの塊が2個見つかります. DebugRelease 用で2個ですね.
ということで必要そうな OTHER_CODE_SIGN_FLAGS を追加しましょう.

		<key>E4B69B4E0A3A1720003C02F2</key>
		<dict>
			<key>baseConfigurationReference</key>
			<string>E4EB6923138AFD0F00A09F29</string>
			<key>buildSettings</key>
			<dict>
				<key>CONFIGURATION_BUILD_DIR</key>
				<string>$(SRCROOT)/bin/</string>
				<key>COPY_PHASE_STRIP</key>
				<string>NO</string>
				<key>DEAD_CODE_STRIPPING</key>
				<string>YES</string>
				<key>GCC_AUTO_VECTORIZATION</key>
				<string>YES</string>
				<key>GCC_ENABLE_SSE3_EXTENSIONS</key>
				<string>YES</string>
				<key>GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS</key>
				<string>YES</string>
				<key>GCC_INLINES_ARE_PRIVATE_EXTERN</key>
				<string>NO</string>
				<key>GCC_OPTIMIZATION_LEVEL</key>
				<string>0</string>
				<key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
				<string>NO</string>
				<key>GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS</key>
				<string>YES</string>
				<key>GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO</key>
				<string>NO</string>
				<key>GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL</key>
				<string>NO</string>
				<key>GCC_WARN_UNINITIALIZED_AUTOS</key>
				<string>NO</string>
				<key>GCC_WARN_UNUSED_VALUE</key>
				<string>NO</string>
				<key>GCC_WARN_UNUSED_VARIABLE</key>
				<string>NO</string>
				<key>MACOSX_DEPLOYMENT_TARGET</key>
				<string>10.8</string>
				<key>OTHER_CODE_SIGN_FLAGS</key>
				<string>--deep</string>
				<key>ONLY_ACTIVE_ARCH</key>
				<string>YES</string>
				<key>OTHER_CPLUSPLUSFLAGS</key>
				<array>
					<string>-D__MACOSX_CORE__</string>
					<string>-mtune=native</string>
				</array>
				<key>SDKROOT</key>
				<string>macosx</string>
			</dict>
			<key>isa</key>
			<string>XCBuildConfiguration</string>
			<key>name</key>
			<string>Debug</string>
		</dict>

こんな感じに.

これで保存してPG通したら楽な世界があなたを待っている!(はず)


最後まで読んだあなたに

諸々やったoF0.9.8zip
CoreOF.xcconfig
template/osx


ところで

最近 Github Sponsors とか登録してみたのでこれで命を助けられた人とか居たら...

1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?