Unityで昔つくったものを見ながら作りたいときがある。
open -n /Applications/Unity/Unity.app
ターミナルで直接たたけばよい。
Xcode のパッケージみると、自分のなかにはiOS 15.5までしかない。つまり、xcodeからビルドしたやつを、実機にいれようとすると、、、
Failed to prepare device for development.
This operation can fail if the version of the OS on the device is incompatible with the installed version of Xcode. You may also need to restart your mac and device in order to correctly detect compatibility.
こうなる。これは実機のOSが15.6だからである。
Mac上の以下を見て見ると
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
見事に15.6だけない。
なんなん。まじで。
こんなん、わからんて。
あと、ちなみに15.6はまだ公開されてない。つまり積みである。
こうなったら、実機をダウングレードするしかない。
iPhone_4.7_P3_15.5_19F77_Restore.ipsw みたいなんを、このあたりからぱくってきてな。
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_ASAuthorizationController", referenced from:
objc-class-ref in NCMBAppleAuth.o
"_OBJC_CLASS_$_ASAuthorizationAppleIDProvider", referenced from:
objc-class-ref in NCMBAppleAuth.o
"_ASAuthorizationScopeEmail", referenced from:
-[NCMBAppleAuth loginWithAppleId:] in NCMBAppleAuth.o
"_ASAuthorizationScopeFullName", referenced from:
-[NCMBAppleAuth loginWithAppleId:] in NCMBAppleAuth.o
"_OBJC_CLASS_$_WKWebView", referenced from:
objc-class-ref in NCMBRichPushView.o
"_OBJC_CLASS_$_UNUserNotificationCenter", referenced from:
objc-class-ref in NCMBAppControllerPushAdditions.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
NCMBさんをつかっているので、そこでエラーでてる。またか。
https://elekibear.com/20220315_01
ここでも解説されているが、ようは フレームワークの追加が足りてない。
Exception: Calling TargetGuidByName with name='Unity-iPhone' is deprecated. There are two targets now, call GetUnityMainTargetGuid() - for app or GetUnityFrameworkTargetGuid() - for source/plugins to get Guid instead.
UnityEditor.iOS.Xcode.PBXProject.TargetGuidByName (System.String name) (at /Users/bokken/buildslave/unity/build/External/XcodeAPI/Xcode/PBXProject.cs:172)
UpdateXcodeProject.UpdateXcode (System.String pathToBuiltProject) (at Assets/NCMB/PlayModeTest/Editor/UpdateXcodeProject.cs:35)
UpdateXcodeProject.OnPostprocessBuild (UnityEditor.BuildTarget buildTarget, System.String pathToBuiltProject) (at Assets/NCMB/PlayModeTest/Editor/UpdateXcodeProject.cs:19)
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&) (at /Users/bokken/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:189)
というエラーがでた。これは以下の参考サイトをみて対処。
つまり、
string targetGuid = pbxProject.TargetGuidByName("Unity-iPhone");
という表記を
string targetGuid = pbxProject.GetUnityMainTargetGuid();
という表記にかえる。
じゃあ、最初からここは直しておいてくれよ!とおもったが、iOSのバージョン?xcodeのバージョンとかでは、前の書き方じゃないとダメらしい。
うーん、、、こういうのやだなあ・・・。
昔から、、、もう10年以上使っていたXREAサーバーだったが、最近めっちゃおそくなっていて泣きそうだった。ワードプレスもとてもおそかった。
以下のサイトを見ながら移転を完了した。以外と簡単だった。
https://xcs.taken.jp/wp-migration-xrea-to-cs.html
ワードプレスのプラグイン「All-in-One WP Migration」はすごい! これでしばらくは、快適なブログになるなぁヽ(‘ω’)ノ三ヽ(‘ω’)ノ
Undefined symbol: _OBJC_CLASS_$_WKWebView
Undefined symbol: _OBJC_CLASS_$_UNUserNotificationCenter
Undefined symbol: _OBJC_CLASS_$_ASAuthorizationController
Undefined symbol: _OBJC_CLASS_$_ASAuthorizationAppleIDProvider
Undefined symbol: _ASAuthorizationScopeEmail
Undefined symbol: _ASAuthorizationScopeFullName
おなじみ ニフティバックエンド をつかって、Unityに実装。そのままxcodeビルドまで持ってきたんだけど、まぁー これがビルドエラー。 どこにも文献がなくて悲しい。↑が回避できなくてこまるなーーー。
Firebaseをつかえということか(T_T)
と思ったら昔、同じところでひっかかってた。ははは。
Unityのバージョンを下げることにした。現時点でのUnityの最新安定版である「2021.3.6f1」なんだけど。普通にAndroidがビルドできん。え、何これレベル。何もしていない状態でのビルドができんって致命的すぎるというかよくリリースしたな!
たぶんaarまわりのせいだとおもう。オレは解決しきれんかった。というか、今でもアメリカのプログラマーの方々が怒っていらっしゃる。
仕方ないので「2020.3.37f1」にもどす。NCMBと絡めるとこのバージョンでしばらくやるわ。
========================
とおもったけど、過去にも同じ事でひっかかってた。ううーん ばかだなぁ あたしゃ
参考文献 Unity+NCMB+iOSビルドでlinker command failed with exit code 1のエラー
自分、「ニフクラ mobile backend」が大好きなんですよ。だって日本製だし!!マニュアルもわかりやすいし、AWSとかなんかめんどくさいから、ヤッホー ニフティさいこう!俺たちのニフティ!!
という感じだったんですが、しばらく使ってなかったので、「まぁ ここは心機一転して、いちど解約してから再度登録しよう!」とかおもったわけですよ。
いやーーーーー なんか登録できなくなりました。 管理者ってどこにいるんだろね???
ニフティさぁん、たすけてぇえええ 1度解約しようとかやってすんませんしたm(_ _)m
新しいGoogleアカウントで登録しました、へへへ。
昔購入したこちらのCDを、Mac OS Big Sur にて読み込もうとしたら、詰まったので備忘録。
背景カタログCD-ROM1住宅路上編 単行本(ソフトカバー) – 2006/6/20
これをMacで読もうとすると、読み込めなくて積む。原因はCD自体が過去の規格(hts)で作られているためである。回避するにはwindowsで読み込むとかあるけど、Macしかないときは困る。
以下の記事を参考に、ディスクユーティリティを開き、非活性化している(マウントされてない)CD-ROMを右クリックでひらき、ディスクイメージ(dmgファイル)を作成して、dmgファイルを読み込む方法がある。
https://books.mdn.co.jp/faq/measures-for-mac/
ただ、ディスクイメージを作成しようとしたとき、「許可されてない」的なエラーがでることがある。ここで詰まったのだ。
正解は、「セキュリティとプライバシー」に、「ディスクユーティリティ」を追加することでディスクイメージが作成されるようになる。
無事に、dmgファイルが作成される。あとはこれをクリックすればよめる。
さて、作成したdmgファイルを開こうとすると以下のエラーがでた。
「マウントできるファイルシステムがありません」ということで、ここでまた詰んでしまう。ちっ たくよぉ、、、。
Parallels Desktopをたちあげ、DMG Extractorソフトを入れて読んでみたが1ファイルしか表示されないようだった。
うーん。
古いwindowsを引っ張り出して読み込みました。
くそおおおおおおおおおお。
以下のようにメール本文をHTMLに直書きするとロボット(クローラー)が自動的にメールアドレスを取得して広告メールなんかが爆裂に飛んできてしまう。
<a href="mailto:abc@abc.com">Mail</a>
そこで、以下のようなサイト
https://www.luft.co.jp/cgi/coding.php
を利用してメールエンティティ化する。こうするとメールアドレスが直接HTMLにかかれていないため、拾われることがない。
<script type="text/javascript">
<!--
function converter(M){
var str="", str_as="";
for(var i=0;i<M.length;i++){
str_as = M.charCodeAt(i);
str += String.fromCharCode(str_as + 1);
}
return str;
}
function mail_to(k_1,k_2)
{eval(String.fromCharCode(108,111,99,97,116,105,111,110,46,104,114,101,102,32,
61,32,39,109,97,105,108,116,111,58)
+ escape(k_1) +
converter(String.fromCharCode(96,97,98,63,102,108,96,104,107,45,98,110,108,
62,114,116,97,105,100,98,115,60))
+ escape(k_2) + "'");}
document.write('<a href=JavaScript:mail_to("","")>(必ずお問い合わせなどの文字を入力してください)<\/a>');
//-->
</script>
<noscript>(画像などを設置)</noscript>
このメールエンティティ化したリンクをクリックしたとき、メールタイトルやメール本文などをどうするか?というと、こうする
<script type="text/javascript">
<!--
function converter(M){
var str="", str_as="";
for(var i=0;i<M.length;i++){
str_as = M.charCodeAt(i);
str += String.fromCharCode(str_as + 1);
}
return str;
}
function mail_to(k_1,k_2)
{eval(String.fromCharCode(108,111,99,97,116,105,111,110,46,104,114,101,102,32,
61,32,39,109,97,105,108,116,111,58)
+ escape(k_1) +
converter(String.fromCharCode(117,104,107,107,96,102,100,111,113,110,108,63,102,108,96,104,107,45,98,110,108,
62,114,116,97,105,100,98,115,60))
+ escape(k_2) + "メールタイトル&body=下記項目を入力してください%0D%0A%0D%0A名前→%0D%0A年齢→%0D%0A住所→%0D%0A電話番号→%0D%0A身長→%0D%0A体重→%0D%0A%0D%0A本文本文本文本文本文本文%0D%0A'");}
document.write('<a href=JavaScript:mail_to("","") class="btn btn-primary btn-block btn-entry">メール送信する<\/a>');
//-->
</script>
<a href="JavaScript:mail_to("","")" class="btn btn-primary btn-block btn-entry">メール送信する</a>
body内にある
%0D%0A
は改行できる。メールリンクはスマホからだと送信する方も、受信して返信する方も、楽である。サーバー上にプログラムを置く必要もない。
あちこちでいわれている事であるが、Mac miniのBluetooth接続の周辺機器がおかしいというやつである。マウスとかが動きがもたついたり、スクロールがうまくいかなかったりする。これが時折発生するのでイライラしてた。
Mac miniのwifiを切ってはいたけれど、もたつきはかなり発生していたので諦めかけていたんだけど、解決策をみつけて試してみたら直ったようなので、ここに記す。
購入したMac mini は以下。
3.2GHz 6コア第8世代Intel Core i7(Turbo Boost使用時最大4.6GHz)
メモリは64GB、ストレージは1TB。
解決方法(自分の場合)無線LANの2.4GHzを全部切る、OFFにする。
これで、解決した。今は快適。2.4GHz帯はBluetoothと使用帯域が重複するから、が原因。BluetoothのほうがWi-Fiに比べ送信出力が約10分の1と小さく、干渉が起こるとBluetoothのほうが不利なのが原因らしい。
2.4GHz帯は周波数が低く、電波が遠方まで届きやすい点がメリット。
5GHz帯のメリットは、Wi-Fi専用の電波である事。ただ、壁などの障害物があると弱まりやすいらしい。
自宅内で使用するwifiは5Ghz統一でいいのかもね。
Canvasは常に画面に映るようにしてくれる「俺をつねに見とけ」的な強気なオブジェクトです。これにボタンとか入れることで、カメラワークとは関係なく常に画面の定位置に居続けてくれます。
そんな自分のCanvas設定がこちらです。
ただ、これはカメラとか関係ない状態なんでね。簡単な2Dアプリケーションとかつくるときはいいんですけどね。パーティクルやらスプライトやらを使うときは困るわけです。そこで以下の設定。
位置のZはわかりやすく0にして、あとはこんな感じに。
そして、前回の設定をやったあとに、
レンダーモードとレンダーカメラをこうしておく。
するとカメラの中にCanvasが収まってくれる。(カメラが真ん中に見えるよね)
これで、2D、3Dゲームと同じようにスプライトや、パーティクルなんかを置くことが可能になる。
ちなみに、Canvasのレンダーモードを「スクリーンスペース・カメラ」にすると、Canvasは常にカメラから100離れた位置に居続ける。カメラをどれだけ移動しようと常にきっかり100離れた場所に居続けるようだ。
Canvasだけをつかったアプリも最近はよく見かける。お手軽だし。でもカメラまできちんと考えて設置しておいたほうがアニメーションもいい感じになるし、こちらがいいとおもう。
えーとね、Macの純正のキーボードはかっこいいんだけどね、まー 実際使いにくいのよね。俺のマストキーボードはマイクロソフトのMicrosoft Natural Ergonomic Keyboard 4000なの。でも今は販売中止になってしまって。また再販してほしいのになぁ。
さて、Macの純正キーボードは使いにくいというか、俺がwindowsとmacを両方使っているのが原因だから。これを一本化してみようとおもう。
macにいれたソフトは以下のもの。
https://karabiner-elements.pqrs.org/
これを使ってキーボードを設定します。参考にしたサイトは以下。
https://colo-ri.jp/develop/2019/01/macos-ej-ime.html
https://creative89.com/2017/05/27/how-to-use-windows-keyboard-on-mac/
これを参考に以下のように設定をした
よし、これでキーボード切替機をいれれば問題ないな
2021/03/12追記
さらにキーボードマッピングを修正。だんだん完璧になっていくな。
さらに以下を購入して、きりかえもばっちりんこ
USB 切替器、ABLEWE USB3.0 切り替え 5Gbps高速転送 PC2台用 4USBポート プリンタ マウス キーボード ハブなどを切替 手動切替器 USBケーブル×2 (1.0m)付き
https://www.amazon.co.jp/gp/product/B0859YCPWV
2021/03/13、キーボードマッピングを変更した
新しいMacを仕入れて、「さーて、Sourcetreeの設定でもするかな?」と思い、設定を始めたところつまってしまった。経緯は以下
そしたら、ユーザーIDとパスワードを聞いてくるため 入力する。ここで間違い発生。Backlogは2段階認証を設定しているとパスワードがアカウントログインのものとは違っているのだ。うっかりしていた。
入力をミスるとmacの場合、キーチェーンに記録さてしまい、次回以降SourceTreeはそれを参照するようになる。つまり間違い続けるログインをやりつづけるため、2度とBacklogにgitアクセスできないということになる。
これSoucretreeのバグじゃねーの?とおもったが、我慢して対処方法を探すことにした。
まずキーチェーンからsourcetreeのところを削除する。しかし、それでもだめで再度ユーザーとパスワードを聞いてこない。
次に以下の場所にジャンプ
~/Library/Application Support/Sourcetree
ここには、Sourcetreeのアプリケーションのセーブデータが入っている。まるごと削除する。どうせ、最初からの設定だしどうでもいい。もしSourcetreeをバリバリ使用途中だったらこれをやるとさすがにまずかろう。
ここまでやってアプリケーションを再起動したらうまくいった。いえーい。
バックログの2段階認証はめんどくさいなぁ。
Unityでビルドして、xcodeにいき、そこでビルドしたときに出るなんだかよくわからんエラー。ぞろぞろ出てくるもんだから とっても怖い。
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_UNUserNotificationCenter", referenced from:
objc-class-ref in NCMBAppControllerPushAdditions.o
"_OBJC_CLASS_$_ASAuthorizationController", referenced from:
objc-class-ref in NCMBAppleAuth.o
"_OBJC_CLASS_$_ASAuthorizationAppleIDProvider", referenced from:
objc-class-ref in NCMBAppleAuth.o
"_ASAuthorizationScopeEmail", referenced from:
-[NCMBAppleAuth loginWithAppleId:] in NCMBAppleAuth.o
"_ASAuthorizationScopeFullName", referenced from:
-[NCMBAppleAuth loginWithAppleId:] in NCMBAppleAuth.o
"_OBJC_CLASS_$_WKWebView", referenced from:
objc-class-ref in NCMBRichPushView.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
UnityFrameworkが不足しているだけである。
あわてず、+ をクリックし以下を追加する
WebKit.framework
UserNotifications.framework
AuthenticationServices.framework
そこまでやって、再度ビルドしよう。いちおうxcodeもクリーンして、再起動かましとこう。
あとは、AuthenticationServices.frameworkを「Optional」に変更しておく。
AuthenticationServices.frameworkは、ユーザー認証のフレームワークらしい
https://developer.apple.com/jp/documentation/authenticationservices/
特に迷わなかった。証明書.p12を書き出すときに間違ってパスワードを設定したくらいである。
ニフクラのドキュメントにきれいに書いてある。
念の為、ざっくりと手順だけかいておく。
1)Appleデベロッパーにアクセスして準備
https://developer.apple.com/にて
・「バンドル識別子」を使用します。
・証明書はめんどくさいので、本番用をいきなり作りました
・こちらにきれいに書いてある。
mBaaSとAPNsの連携に必要な設定
https://mbaas.nifcloud.com/doc/current/tutorial/push_setup_ios.html#gsc.tab=0
証明書を.p12形式に変換するとき、パスワードを設定しちゃいかんぞ
プッシュ通知の設定はiOSの方が簡単じゃのお
ほんとさあ、プッシュ通知まじでめんどくさい。何がめんどくさいって最初がめんどくさい。ほんとめんどくさい。最初はFirebaseだけでやろうと思ったんだけど、どーもUnityでのビルドでひっかかってしまう。何が悪いかわからない。
そういうわけで、我らがニフクラでプッシュ通知を実装したので、以下手順を書く。Unity + ニフクラ + Firebaseということになる。挫折したひと、いると思うのよね。
つかうもの
1)Unity(プロジェクトつくっておく)
2)Firebaseを使う
3)ニフクラを使う
1)Unityでプロジェクト作る
まず、Unityで適当なプロジェクトを作る。別になんでもよい。プロジェクトを作成したらビルド設定をひらき、プレイヤー設定をクリックして
バンドル識別子を設定しておく。
2)Firebaseの設定を行う
プロジェクトを追加にて新しくプロジェクト追加する。
Unity アプリに Firebase を追加 にて、バンドル識別子を入力。iOS app にもプッシュ通知したいのでここにもバンドル識別子をいれる。もちろんAndroid appにもいれる。アプリのニックネームは適当に。
秘密鍵のダウンロードをする
google-services.json をダウンロードしておく(Android用)
GoogleService-Info.plist をダウンロードしておく(iOS用)
ここまでで、Firebaseの設定は終わります
3)ニフクラの設定
プッシュ通知設定ファイルの選択 をクリックして、firebase上でダウンロードした秘密鍵をアップする
4)Unityの設定
基本的にはニフクラのドキュメントに沿って行えば良い。以下、簡単に書いておく。
1.NCMBのSDKをインポート。
2.Prefabsフォルダ内の「NCMBManager」「NCMBSettings」をドラッグしてシーン直下へ。
3.NCMBSettingsのUse Pushにチェックをいれる。
4.google-services.jsonを配置する。(google-services.jsonは、プロジェクト内のAssets/Plugin/Android直下に配置。)
5.アプリケーションキーとクライアントキーを入力。(アプリケーションキーとクライアントキーはニフクラからコピペ。)
5)ここまででいったん、ビルドしてAndroid端末にいれてみよう
もしビルドエラーが出た場合、Unityを再起動する。どういう理屈なのかはわからないが、なんらかのSDKをインポートしたとき、ビルドでめっちゃエラーがでてくるときがある。
6)プッシュ通知をするためのコードを書く。
PushObjectをいうゲームオブジェクトを作成し、PushObjectソースコードファイルをアタッチ。
コードは以下。
using UnityEngine;
using System.Collections;
/////////////////////////ここから追加コード////////////////////////
//SDKの利用を宣言
using NCMB;
/////////////////////////ここまで追加コード////////////////////////
using System.Collections.Generic;
public class PushObject : MonoBehaviour {
/////////////////////////ここから追加コード////////////////////////
private static bool _isInitialized = false;
/// <summary>
///イベントリスナーの登録
/// </summary>
void OnEnable()
{
NCMBManager.onRegistration += OnRegistration;
NCMBManager.onNotificationReceived += OnNotificationReceived;
}
/// <summary>
///イベントリスナーの削除
/// </summary>
void OnDisable ()
{
NCMBManager.onRegistration -= OnRegistration;
NCMBManager.onNotificationReceived -= OnNotificationReceived;
}
/// <summary>
///端末登録後のイベント
/// </summary>
void OnRegistration (string errorMessage)
{
if (errorMessage == null) {
Debug.Log ("OnRegistrationSucceeded");
} else {
Debug.Log ("OnRegistrationFailed:" + errorMessage);
}
}
/// <summary>
///メッセージ受信後のイベント
/// </summary>
void OnNotificationReceived(NCMBPushPayload payload)
{
Debug.Log("OnNotificationReceived");
}
/// <summary>
///シーンを跨いでGameObjectを利用する設定
/// </summary>
public virtual void Awake ()
{
if (!_isInitialized) {
_isInitialized = true;
DontDestroyOnLoad (this.gameObject);
} else {
Destroy (this.gameObject);
}
}
/////////////////////////ここまで追加コード////////////////////////
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
「Awake」内の処理、これを書くことでPushObjectが別のシーンに入っても生き続けることができる。OnEnable内の処理で端末をニフクラに登録することが可能となる。
Unityをビルドし、端末で実行してみる。
ニフクラのサーバー内にプッシュ通知をおくるべき端末が記録されていることを確認できる。
あとは、ニフクラのプッシュ通知を使用してプッシュ通知をおくることが可能になる。
原因不明だったのだが、なぜか治ってしまった。備忘録として書いておきたい。
経緯/
Firebaseの公式サイトからSDKをダウンロードし、解凍してインポートした。目的はプッシュ通知である。ドキュメントのとおりに行う。
しかし、ビルドエラーが乱立してしまった。キャプチャーを撮っていなかったが、JDK周りのエラーのようだった。Firebaseをインポートする前は普通にビルドできていたため、インポートしたファイルの何かが悪いというのはわかるのであるが、原因が探せなかった。
解決方法/
Firebaseのドキュメントの中に、
iOS の場合 – [GoogleService-Info.plist をダウンロード]
Android の場合 – [google-services.json をダウンロード]
というのが存在した。この2つのファイル「GoogleService-Info.plist」「google-services.json」をUnityのAsset直下においておけ、とドキュメントに書いてある。自分はそのとおりにした。
結論から言うと、この2つのファイル「GoogleService-Info.plist」「google-services.json」をAssetから外すことでビルドが通ってしまった。なぜかはわからない。
再度2つのファイルをAsset直下にいれたら今度はビルドが通った。
なぜかはわからない。誰かおしえてくれろ。
https://qiita.com/watame/items/5f82abead68db483d6f2
PDFを作成するやつに、独自フォントを入れる方法。
ここのテンプレートは素晴らしい、簡素でいてわかりやすく。0から構築するのに大変便利、金額も高くない。
見栄えもする、しばらくの決定版として使っていいと思われます。