ラベル xcode の投稿を表示しています。 すべての投稿を表示
ラベル xcode の投稿を表示しています。 すべての投稿を表示

2017年9月26日火曜日

Xcode8のままiOS11ビルドをする

どうも俺です。


iOS11がリリースされ、それに合わせてXcode v9もリリースされました。
Xcodeをバージョンアップするためには、
先にMacOSをバージョンアップする必要があって...いつもながら超面倒です。

Xcode8のままだとiOS11用にビルドできない...とお思いのみなさん、
裏技を使ってそのままiOS11ビルドできます。

※動作保証はできませんので、自己責任で行って下さい。


(1) Xcode 9をダウンロードする
https://developer.apple.com/download/more/
からXcode 9をダウンロードし解凍します。
結構時間かかります。

(2) Xcode 9.appを適当なディレクトリへおく
/Application/Xcode-9.app などへ移動させましょう。

(3) Xcode 8を適当な名前にリネームしておく。
仮に、Xcode-8.app としておきましょう。

(4) Xcode 8.appにXcode 9.app内にあるiOS11ディスクイメージのシンボリックを貼る

$ sudo ln -s /Applications/Xcode-9.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/11.0\ \(15A5278f\) /Applications/Xcode-8.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/11.0

(5) Xcode 8.appを再起動
再起動したら準備OK。iOS11端末をつなげてビルドできます。




ここに答えが。
Use Xcode 8 with iOS 11 | stack overflow



以上でぇぇぇぇす。

2017年8月8日火曜日

linker command failed with exit code 1が出た時の解決方法案

どうも、俺です。

Xcodeで開発してて目にすると1時間はその解決に費やしてしまうこともある地獄のエラー文言。
そう、それが
linker command failed with exit code 1


※Xcode 8.3.3

今日はこのエラーが出た時「これやったら直った」というあらゆる手段をお伝えします。


■プロビジョニングプロファイルは正しく設定されているか

人により設定方法は様々ですが、僕の場合、
・General>SigningにあるAutomatically manage signingのチェックをはずす

・Build Settings内、
 ProvisioningProfile (Deprecated)とProvisioning Profileの2箇所に適切なプロビジョニングプロファイルを設定。
 Code Signing Identityに正しい証明書を設定。
 最後にDevelopment Teamにチーム名を設定。

としています。
このミスの際は、ちゃんと「プロビジョニングプロファイル間違えているよ」というエラーが出ることが多い...。


■Enable Bitcodeの設定を間違えていないか

Build Settings>Build Options内にあるEnable Bitcodeが「Yes」になっているとアカン場合がある。
組み込んだフレームワークがbitcodeとやらに対応していないかもしれないので、速攻「No」に設定し直す。




■存在しないリソース(画像etc)を取り入れようとしていないか

Build Phases>Copy Bundle Resources内に存在しないリソースがないか要チェック。
無いものが含まれている場合は削除します。



■Deployment Targetを間違えていないか

General>Deployment InfoにあるDeployment Targetに無茶な値を入れていないか。
古すぎるターゲットなどに設定している場合は、よく考えて適切な値にします。



■Info.plistの設定Target Membershipは大丈夫か

Info.plistを選択してTarget Membershipにチェックが入っているとアウト。
チェックを外します。



■Xcodeを再起動しよう

この方法を使うと90%の確率でビルドが成功します。
試してみる価値あり。



■Mac本体ごと再起動しよう

この方法を使うと50%の確率でビルドが成功します。
試してみる価値あり。




上記以外でこのエラーの対処方法があれば教えてください。


※※※2017.08.18追記
このエラーが出た時に詳細ログが見れないのでモヤモヤしてたのですが、ログを見る方法が分かりました!
command+8 !!
LogNavigatorというやつらしいです!
これで具体的にエラー内容確認できます!


以上でぇぇぇぇす。

2015年9月18日金曜日

cocos2d-x Spineのサンプルアニメーションが動かないのでランタイムを最新に更新する

どうも、俺です。

cocos2d-x v2.2.6でSpine v2.1.27(Essential)に梱包されているサンプルアニメーション(iOS版)が動かなかったので、
Spine-runtimeをマニュアル通り、最新verに更新したらcocos2d-xがエラーだらけになり、
四苦八苦しながら何とか動かせるようにまでにした時のメモ。


■Spineがexportする.atlasファイルが読み込めない問題
まず、自分で簡単なアニメーションを作成しSpineでエクスポートしたファイルを
cocos2d-xで動かそうとすると
、この問題にぶち当たります。

これは、出力された.atlasファイルを修正すると直ります。


上の画像にある
size: xxx, xxx
という1行を削除すればOKです。

または、このあと行うSpineのランタイムを更新すると直ります。


■Spineのランタイムを更新する問題
githubからランタイムをDLしてきます。
/spine-runtimes

更新に必要なファイルは
spine-c/以下 と
spine-cocos2dx/2/以下 のファイルだけです。
READMEにある通り、上のファイル群をcocos2d-xのextensions/フォルダ以下へコピーします。


元からあるextensions/spineフォルダは別名でバックアップしておきます。
githubからDLしたファイルすべてをまた
extensions/spineというフォルダに入れます。

READMEによるとこれで動くぜ、とのことです。


動きません。
なぜなら、Xcodeには前の古いファイルがまだ紐付けられているからです。


ここを正しくします。

やり方は色々ありますが、僕の場合は面倒なので
まずディレクトリーツリーからspine/をRemove Referencesしてから、

DLしてきたextensions/spineフォルダをXcodeへドラッグ&ドロップします。


ここでビルドしますが、まだまだ動きません。


No type named 'function' in namespace 'std'
といったエラーが出ます。

これは新しいSpine-runtime内のソースファイルの一部が
C++11の規格によって記述されているから。

cocos2d-x v3系であれば問題ない(?)のかもしれませんが、v2系ではだめです。
Xcode側でC++11を使えるようにします。



TARGETSのBuild Settings内にある「Apple LLVM 6.1 - Language - C++」という箇所の
・C++ Language Dialectを「C++11 [-std=c++11]」に
・C++ Standard Libraryを「libc++(LLVM C++ standard library with C++11 support)」
に変更します。

同様にcocos2d-xプロジェクト側のBuild Settingsも上に合わせます。



次にクラス名とメソッドを変更します。

// CCSkeletonAnimation *animation = CCSkeletonAnimation::createWithFile("test.json", "test.atlas");
spine::SkeletonAnimation *animation = spine::SkeletonAnimation::createWithFile("test.json", "test.atlas", 1.0f);

// animation->setAnimation("walk", true);
animation->setAnimation(0, "walk", true);

this->addChild(animation);

こうなります。

あとはプロジェクトを一旦Cleanしてからビルドすると動くと思います。

それでもまだエラーが出る場合は、
プロジェクト名>Build Phases>Compile Sources
に古いspine/以下のソースファイルが赤く表示されているかも知れません。
その場合はそれらを消してもう一度試してみてください。


※※注意※※
もし別のプロジェクトに手を付ける場合、
spine/フォルダや、C++11コンパイラオプションの変更などを元に戻して下さい。

もう、cocos2d-x v3系にしないとな。。。


以上でぇぇぇぇす。

2015年9月4日金曜日

[Xcode] コマンドラインからipaファイルをエクスポートする

どうも、俺です。

 今日は、アーカイブされたiOSアプリをコマンドラインから.ipaファイルをビルドする方法をメモ。


いつも通りProduct>Archiveします。




オーガナイザーが起動するので、対象のビルドされたアプリを選択しCtrl押しながらクリックし「Show in Finder」を選択。




Finderが起動するので、ファイルのパスとファイル名をメモ。




次に、XcodeのBuild Settings>Code Signingからビルドに使用するプロビジョニングプロファイルの名称(通称?)をメモ。




今回の場合、Releaseビルドをしようと思うので「KabekeriSasuke3_AppStore」をメモ。


あとはビルドコマンドを打ち込むだけ。

xcodebuild -exportArchive -archivePath '.xcarchiveファイルのパス' -exportPath '出力先のファイルパス' -exportFormat ipa -exportProvisioningProfile 'プロビジョニングプロファイルの名称'

なので、今回の場合はこうなります。
xcodebuild -exportArchive -archivePath '/Users/USER_NAME/Library/Developer/Xcode/Archives/2015-09-04/Sasuke3 2015-09-04 16.07.xarchive' -exportPath '/Users/USER_NAME/Desktop/Sasuke3App' -exportFormat ipa -exportProvisioningProfile 'KabekeriSasuke3_AppStore'

こうするとDesktop上にSasuke3App.ipaファイルが出来上がります。


なぜこのような面倒なことをするのか、と言うと理由は2つ。
1つは、例えば受託案件でクライアント所有の証明書やプロビジョニングプロファイルでビルドする際、先方のiTunesConnectのアカウント情報を知らないとXcodeからDistributionビルドできません。
そういう場合に、上の方法でビルドします。

もう1つは、自社アプリをAdHocビルドしようとしたときに、オーガナイザで選択するプロビジョニングプロファイルが「XC Ad Hoc: xxxx〜....」というファイルしか選択できないときがあります。(ありました。)
なぜそうなってしまうのか未だ原因は分かっていませんし、そのプロビジョニングプロファイルでもビルド出来るのですが、
何かしっくりこないので、そういう場合にコマンドラインからビルドしました。

XC Ad Hoc: 〜プロビジョニングプロファイルについて何か知っている方いらっしゃったら教えてください〜m(__)m

以上でぇえぇぇす。

2015年1月8日木曜日

64bit(arm64)対応するとJSONKitがエラー[iOSアプリ]

どうも、俺です。

Xcode開発でアーキテクチャにarm64を追加すると
組み込んだ3rdパーティ製ツールのJSONKitからエラーが出てビルドできません。



githubを見ると、JSONKitはかなり長い間更新が止まっており
arm64アーキテクチャに対応していないようです。

この場合は、
該当のエラーが出ている箇所にマウスポインタを併せてクリックし、
エラーを修正してしまえば対応できます。


エラー箇所は2箇所あります。


または、
元のJSONKitをフォークして64bit対応したソースが公開されているので、
そちらでも対応出来ると思います。(※未確認)


以上でぇぇぇぇぇぇす。

2014年11月13日木曜日

[Xcode] No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7s armv7).のエラー

どうも、俺です。

Xcodeでビルドさせたときに、タイトルのようなエラーが出る人へ。


方法は2つ考えられます。

1)Build Settings内にある「Build Active Architecture Only」の値をNoにする。
2)転送先端末(またはシミュレータ)にマッチしたアーキテクチャを「Valid Architectures」に記述する。

これでエラーが出なくなるかもしれません。


1)の「Build Active Architecture Only」ですが、
これは"Yes"にすると現在選択された(転送先)端末に適した
アーキテクチャのみでビルドする、
という設定になるため、そのアーキテクチャが「Valid Architectures」にない場合は上記のエラーとなるようです。

以上でぇぇぇす。

2014年10月2日木曜日

Xcode6(v6.0.1)でアーキテクチャarmv7sがはずされてしまう。

どうも、俺です。
しばらくぶりのブログです。忙しかったです。


さて、iOS8もリリースされXcodeも新たに6系が出てきました。
が、これまで通りの設定のままXcode6でビルドすると、armv7sでビルドができません。

これは、TARGETS>Build Settings>Architectures>Architecturesのデフォルトの設定にある
Standard Architectures (armv7, arm64)
が原因です。

これでは、いくらValid Architecturesにarmv7sを書いても
そのバイナリは生成されません。


対応するには、
先ほどのArchitecturesを選択し、
Other...
から「armv7s」を追加しましょう。


あとは、Valid Architecturesにarmv7sを記入しておけばOKです。


以上でぇぇぇぇぇぇす。

2014年1月15日水曜日

Xcode cannot run using the selected device

どうも、俺です。

Xcodeでビルドしようとした際に
「Xcode cannot run using the selected device」というエラーが出てビルド出来ないあなたへ。

"Xcode cannot run using the selected device"に苦しんだ数日間 - マキシぐんだんの中の人のブログ
に同様の問題の対応方法がありますが、僕の場合は少し違いました。

Info.plistの"Target Membership"にチェックが入ってしまっていたことが原因。
チェックを外して解決しました。


以上でぇぇぇぇぇぇす。

2013年7月23日火曜日

cocos2d-x Xcodeで"Symbol not found: ___CFObjCIsCollectable"というエラーが出る、でも大丈夫

どうも、俺@家です。

タイトルの件ですが、Xcodeでcocos2dxなアプリを開発しててiOSシュミレータで実行しようとすると、
Error loading /System/Library/Extensions/AudioIPCDriver.kext/Contents/Resources/AudioIPCPlugIn.bundle/Contents/MacOS/AudioIPCPlugIn:  dlopen(/System/Library/Extensions/AudioIPCDriver.kext/Contents/Resources/AudioIPCPlugIn.bundle/Contents/MacOS/AudioIPCPlugIn, 262): Symbol not found: ___CFObjCIsCollectable
  Referenced from: /System/Library/Frameworks/Security.framework/Versions/A/Security
  Expected in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
 in /System/Library/Frameworks/Security.framework/Versions/A/Security
のようなエラーメッセージが出まくる場合。
問題ない、大丈夫。no problem。
だってほら、シュミレータ実行できてるでしょ。
iOSシュミレータのバグだそうです。

Error: symbol not found: __CFObjCIsCollectable - stack overflow

以上でぇぇぇぇぇす。

2013年5月24日金曜日

dyld: Symbol not found: _OBJC_CLASS_$_NSJSONSerializationでハマった

どうも、俺@帰宅です。

iOSアプリ開発しててハマったのでφ(..)メモメモ

iOSv5.0以上だと問題なく動作するのに、
iOS4.3端末だとビルドは通りますが実行するとタイトルにもある
dyld: Symbol not found: _OBJC_CLASS_$_NSJSONSerialization
Expected in: /System/Library/Frameworks/Foundation.framework/Foundation
のエラーが出ちゃいました。

あ、先に解決方法から書いちゃいますが、
僕の場合はFacebook-SDKのv3.5.1を使っていた為、iOS4.xサポート外だったというオチです。。
チェンジログをちゃんと読め、ということですね。
なのでここから、iOSv4をサポートしているFacebook-SDKのv3.2.1を落としてきて対応しました。

で、本題の
dyld: Symbol not found: _OBJC_CLASS_$_NSJSONSerialization
ですが、これはそのまま
「NSJSONSerializationが見つからねぇよ!」というエラーです。
なぜiOSv4.3端末で見つからねぇかと言うと、NSJSONSerializatoinクラスはiOSv5以上で利用可能だからです。
参考:Apple開発者サイト

でも、deployment targetを4.3に指定してるとどうしてもiOSv4.3で動作させなければいけません。

もう一つ手がかりとなるのが、Xcode上に表示される
dyld`dyld_fatal_error:
0x2fe01080: trap 
0x2fe01084: mov r0, r0
のようなエラーです。
これはiOSv5.0以上に対応しているが、
それ未満には対応していないframeworkを呼び出したりしている場合に出やすいエラーです。
まさに今回の現象にズバリマッチしています。

そういう場合は読み込んだframeworkを "Optional" にするなどして対応出来るのですが、
今回の僕の場合はどのframeworkもOptionalに出来ませんでした。
で、組み込んだframeworkやSDKを1つずつチェックしてて、
Facebook-SDKのChangelogに気付いたという事でした。

もしFacebook-SDK(iOS)を利用してて同様のエラーに遭遇した人は確認してみてください。


以上でぇぇぇぇえす。

2012年1月31日火曜日

Xcode 実機で動作しなくなる('NSInternalInconsistencyException', reason: ' Could not load NIB in bundle...)

どうも、俺@絶賛objective-c中です。

Xcode ver.4.2で開発してて、iPhoneシュミレーターでは動作確認できるのですが急に実機で動作しなくなった!という場合の対処法めもです。
場合によっては原因が異なると思うので、これが解決法の全てではないかもしれませんが。。

iPhone実機(5.0.1)に繋いでXcodeからビルド&実行すると以下のようなエラーが出てしまい、ビルドはできるのですが実行できません。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle (loaded)' with name 'ViewController'
つい5分前までは動いてたのに!
原因はよく分かりませんでしたが、以下をやることで実機でも動作するようになりました。

エラーログにある「ViewController.xib」を開き、右側の「Utilities」>「File Inspector」内にある「Localization」の部分を見ます。
僕の場合は
English
の1つのみが書かれていたので、「Japanese」を追加します。

するとViewController.xibが
ViewController.xib(English)
ViewController.xib(Japanese)
の2つになります。
この状態で実機転送すると動作します。

このあと、なぜか先ほどのLocalizationにある
Japanese
は削除しても実機で動作しちゃいます。

理由はよくわかりませんが、もしトラブった人は試してみて下さい。


以上でぇぇぇぇぇぇす。