Apple Silicon MacでUnity + VSCodeの補完を有効にするための設定

M1 MacでUnityのセットアップをしていてVSCodeの補完設定についてメモ。
arm64版のHomebrewのみを使用している環境の話です。

基本的な設定は下記ポストを参考にさせて頂いて、 Monoのインストールだけpkgからインストールするようにすればうまくいきました。 qiita.com

Monoのインストール

今のところ(arm64版の)Homebrewからインストールすることができないようなので下記からpkgをダウンロードしてインストールする。

www.mono-project.com

  • [メモ]Monoのアンインストール方法
sudo rm -rf /Library/Frameworks/Mono.framework
sudo pkgutil --forget com.xamarin.mono-MDK.pkg
sudo rm /etc/paths.d/mono-commands

VSCodeの設定

settings.jsonに下記設定を追加する。

{
    "omnisharp.useGlobalMono": "always",
    "omnisharp.monoPath": "/Library/Frameworks/Mono.framework/Versions/Current/Commands"
}

Big Sur + Xcode 12.2にXcode Source Editor Extensionを認識させる方法

対処方法

XcodeKit.frameworkを追加して、Embed & Signにする。
XcodeKit.frameworkは10.15用にビルドされているようなので必要ならDeployment Targetも見直す。

メモ

私の環境(Mac mini 2020 M1)ではこの対処で認識することを確認しました。 ビルドしないといけないのでApp Storeに公開されているものについては開発者の対応待ちになりそうです。

なお、Big SurのXcode 12.2でXcode Source Editor Extensionを新規作成してみると XcodeKit.frameworkは追加されていたものの、Do Not Embedになっているので認識してくれません。

SlackからGitHub Deploymentsで投げたEnvironment / TaskをGitHub Actionsで参照する方法

SlackからGitHub Deploymentsで投げたEnvironment / TaskをGitHub Actionsで参照する方法を調べたのでメモ。 GitHub REST API v3で投げた場合も同じだと思います。

この画面で指定した値がGitHub Actionsのワークフローで取れるのでstagingとproductionで動作を変えたりできて便利。(Environment / Taskを規定値のドロップダウンリストにする方法があるか知りたい。) f:id:tid-a24:20200517011139p:plain

  • Environment
${{ github.event.deployment.environment }}
  • Task
${{ github.event.deployment.task }}

developer.github.com

UISceneを使ったアプリをSpotlightから開いた時に呼ばれるデリゲートメソッド

iOS 13から追加されたUISceneを使用していると、Spotlightで検索した結果からアプリを開いた時に呼ばれるデリゲートがUIApplicationDelegateからUISceneDelegateに変わります。

import CoreSpotlight

// UISceneDelegate
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    switch userActivity.activityType {
    case CSSearchableItemActionType:
        print("ITEM SELECTED")
    case CSQueryContinuationActionType:
        if let searchQuery = userActivity.userInfo?[CSSearchQueryString] as? String {
            print("From Spotlight => \(searchQuery)")
        }
    default:
        break
    }
}
import CoreSpotlight

// UIApplicationDelegate
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    switch userActivity.activityType {
    case CSSearchableItemActionType:
        print("ITEM SELECTED")
    case CSQueryContinuationActionType:
        if let searchQuery = userActivity.userInfo?[CSSearchQueryString] as? String {
            print("From Spotlight => \(searchQuery)")
        }
    default:
        return false
    }
    return true
}

その他でもUISceneDelegateが使われることになるのでSceneを使用する場合は要確認です。

参考

https://developer.apple.com/videos/play/wwdc2019/212

Migrating your codeで触れられてます。(PDF 50ページあたり)

Mac CatalystでUIAlertControllerをシートとして表示する

確認バージョン:Xcode 11.3

let alertController = UIAlertController(title: "Alert", message: "", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: { _ in
    // handle
}))

present(alertController, animated: true, completion: nil)

f:id:tid-a24:20190315214748p:plain

カスタマイズできるもの

  • タイトル
  • メッセージ
  • ボタン(複数追加可)

注意

textFieldを追加するとシートとして表示されなくなります。

let alertController = UIAlertController(title: "Alert", message: "", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: { _ in
    // handle
}))

alertController.addTextField(configurationHandler: { _ in })

present(alertController, animated: true, completion: nil)

f:id:tid-a24:20191218111117p:plain

Mac Catalyst環境でUITextViewのフォーカスリングを消す

Mac CatalystでUITextViewを編集状態にするとフォーカスリング(画像の青枠)が表示されます。

  • フォーカスリングON(デフォルト) f:id:tid-a24:20191106010806p:plain

これを消す方法がAppleのフォーラムで紹介されていたので引用します。

extension UITextView {
    #if targetEnvironment(macCatalyst)
    @objc(_focusRingType)
    var focusRingType: UInt {
        return 1 //NSFocusRingTypeNone
    }
    #endif
} 
  • フォーカスリングOFF f:id:tid-a24:20191106010741p:plain

引用元

forums.developer.apple.com

Mac Catalyst環境でのみコードを無効化・有効化する

#if !targetEnvironment(macCatalyst)
// macOS環境で無効化するコード
#endif
#if targetEnvironment(macCatalyst)
// macOS環境で有効化するコード
#endif

developer.apple.com