Guild icon
swift-developers-japan
開発環境, ライブラリ / macos
Avatar
@rintaro DispatchSourceがフリーズするやつ、メインキューが埋まってると問題が生じない現象を観察できるtest4を追加しました。 https://github.com/omochi/DispatchSocketIssue
Contribute to DispatchSocketIssue development by creating an account on GitHub.
Avatar
ああー、まだきちんと見てないです。bugreport にはまだ出してないんですか?
Avatar
まだです、このtest4現象も確認したかったので(いまやった)
Avatar
omochimetaru 6/7/2018 7:01 AM
Zhuowei also implemented the Swift runtime port to Android! Epic 🤩 https://t.co/tjgJWCeSM8
7:01 AM
MarzipanTool - Tools for running iOSMac apps on macOS 10.14 Beta
7:01 AM
詳細謎なんだけどすでにUIKit動かしてる人が居る・・・
Avatar
Android ? macOS ?
Avatar
omochimetaru 6/7/2018 7:04 AM
Playing with UIKit in Marzipan thanks to some stellar work by @hamzasood 😄 UITabBarController puts tabs in the window title bar; in window is a UISplitViewController, UITableViewController on one side, and a UINavigationController on the other
Likes
184
😳 2
7:05 AM
macですね
Avatar
Zhuowei also implemented the Swift runtime port to Android!
これは別の話題なのか。
Avatar
omochimetaru 6/7/2018 7:06 AM
もどかしさんは彼の別の功績も紹介してる感じ
Avatar
Android もやってるし、今回は macOS もやったのか。
Avatar
omochimetaru 6/7/2018 7:07 AM
おそらくWWDCで出てきたNewsアプリとかすでにUIKit on Macで走ってるからそれを繋ぎこんでビルドする方法をみつけたぜって事なんだと思う。
7:08 AM
やり方のチュートリアルはあるけど背景技術があまり解説がなくてようわからぬ
7:11 AM
ツイートでハッキング実況してるな・・・
Avatar
macosとiosで共通で使えるcocoa frameworkって作れるのでしょうか? cocoa frameworkとcocoa touch frameworkを作って両方で同じソースを参照するみたいな配置になりますか?
Avatar
最新のXcodeでは試してないですけど、ターゲットとして共有しようとすると変な事が起きた記憶があります
8:57 AM
Mac用とiOS用でターゲットは両方作って、ソースは両方に入れていくのが無難です
8:57 AM
RxSwiftとかもそうなってます。
Avatar
確かに、RxSwift参考になりそうですね ありがとうございます!ちょっと覗いてみます
Avatar
Kishikawa Katsumi 11/19/2018 9:00 AM
Simple Swift wrapper for Keychain that works on iOS, watchOS, tvOS and macOS. - kishikawakatsumi/KeychainAccess
9:00 AM
参考にしてください。
9:01 AM
基本的な考え方は https://github.com/mrackwitz/xcconfigs です。
Universal Framework xcconfigs - build iOS, OS X, tvOS and watchOS frameworks on base of one target - mrackwitz/xcconfigs
Avatar
お、一個になっている。
Avatar
Kishikawa Katsumi 11/19/2018 9:04 AM
iOS/tvOS/macOS/watchOSはmacとシミュレータ(i386/x64), iOSとtvoS(arm64)などアーキテクチャが共通でも同じバイナリはリンクできないので(Fatバイナリも不可)、少なくともプラットフォームぶんの数は必要になります。
9:05 AM
成果物が。^ はソースコードとターゲット、を1つにしてビルド設定をxcconfigで共通化しつつ差分だけ管理するみたいな感じです。
Avatar
まさにこんな感じのを想定してました、なるほどplatformとかdeployment targetそれぞれ書いて行けばよしなな感じになるんですね
Avatar
Kishikawa Katsumi 11/19/2018 9:09 AM
SUPPORTED_PLATFORMSとTARGETED_DEVICE_FAMILYを全部書きつつ、違いをxcconfigのCondition([sdk=iphone*])で吸収する感じですね。 macOSとその他ではLD_RUNPATH_SEARCH_PATHSが違う、watchOSではテストをビルドできない、とかが違いですかね。
❤ 1
Avatar
↑できました!ありがとうございます〜
👍 1
Avatar
そういえば、MojaveはiOSと同じフラットなバンドル構造をサポートしたんだっけ? (edited)
Avatar
リリース版でもサポートされてるのかな? https://twitter.com/pvieito/status/1013447017962631170
macOS Mojave LaunchServices now supports launching flat-style app bundles like iOS. This means that you can create universal app bundles that will work on both iOS and macOS using fat Mach-O executables with x86_64 and ARM64 slices. (cc. @stroughtonsmith) https://t.co/tr...
Likes
223
Avatar
Kishikawa Katsumi 11/20/2018 3:26 AM
^ へえ。そうするとライブラリ作る側は設定が簡単になりますね。
Avatar
macOS app開発周りのdiscordグループ立ち上げたので、よろしければどうぞ。宣伝でした。 https://discord.gg/gtBvPc
10:03 AM
あ、これ期限があるのか。これです。 https://discord.gg/XrSEYPb
Avatar
omochimetaru 4/26/2019 5:20 AM
@Kishikawa Katsumi 昨日のLayer Backed Viewの話、↑で話してます、よかったらご参加ください
😄 1
Avatar
norio_nomura 5/1/2019 12:47 PM
HomebrewでXcodeに依存するFormulaは、Xcode 10.2が入っていないmacOS Mojaveへインストールできなくなるらしい… https://github.com/Homebrew/brew/pull/6083
Xcode >=10.2 is required to build all Swift formulae on macOS >=10.14.4. Rather than requiring per-formula workarounds (e.g. Homebrew/homebrew-core#39446) this provides a more stable ...
Avatar
Kishikawa Katsumi 3/25/2020 11:12 PM
このXPCの呼び出しをキューに載せたの、中の処理は非同期的に実行されるわけだからあんまり意味ないような気がしてきたけどなんでこれでうまくいくんだろう。中の処理が終わるまでセマフォとかで止めて待つのが実は正しいんじゃないだろうか。 https://discordapp.com/channels/291054398077927425/472019265369669634/691468530398396428
Avatar
man xpc_abortによると、_xpc_api_misuseでクラッシュしたらlldbで expression -l c -- (char*)xpc_debugger_api_misuse_info() してクラッシュした理由を調べられるらしい。 (edited)
Avatar
やってみた。 (lldb) expression -l c -- (char*)xpc_debugger_api_misuse_info() (char *) $9 = 0x00007000029e6f90 "XPC API Misuse: Over-resume of a connection." (edited)
Avatar
synchronousRemoteObjectProxyWithErrorHandler(_:)なんてのがあるくらいだから、シリアルキューにしたのは正しい様に見える。
Avatar
Kishikawa Katsumi 3/26/2020 12:13 AM
API Misuse: Over-resume of a connection だからシリアルキューに積むのは合ってる(と思う)、んですけどシリアルキューに入れた処理は非同期だからすぐ抜けてしまうので、connection が先の処理をしている間にまた別のresumeが呼ばれてしまう状況は直ってないんじゃないかな、と思ったんですよね。 順次処理にするのは正しいけど、現状は順次処理に結局なっていないのでは?という疑問です。 (edited)
12:16 AM
synchronousRemoteObjectProxyWithErrorHandlerで呼んだ方が確実かな。でもasyncとsyncがあるということはover resumeしてはいけない期間は呼び出し中というわけでもないのか。そうだったらasyncほとんど意味ないことになるし。
Avatar
呼ばれた側の処理が非同期だとまずいなら、呼ばれた側が対処しないとまずいのでは。
Avatar
Kishikawa Katsumi 3/26/2020 12:28 AM
ちょっと私が全然わかってないので勉強が必要ですね。
Avatar
XPC のことは正直全然わかってないんですが、https://github.com/apple/swift/blob/master/tools/SourceKit/tools/sourcekitd/bin/XPC/Client/sourcekitd.cpp を見る限り resume は初期化時に一回だけやって、suspend は必要なし。ってかんじじゃないです?
The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.
12:33 AM
リクエスト毎に resume()/suspend() はしてないように見えます。
Avatar
Kishikawa Katsumi 3/26/2020 12:35 AM
ホントですね。最初にGlobalConnを作ってresumeして後はsendmessageでいいのか。
Avatar
毎回resume()しないなら、interruptionHandlerをちゃんと設定しないとまずそう。
Avatar
norio_nomura 3/26/2020 1:05 AM
interruptionHandlerでの処理が面倒で、毎回resume(), suspend()を呼ぶ様にしたことがあった様な…
Avatar
Kishikawa Katsumi 9/26/2023 12:00 AM
https://macoscontainers.org/ macOSネイティブのDocker。すごく興味あるけどSIPを無効にしないといけないところが難しいな。
👀 2
12:01 AM
SIP有効だとそもそもchrootができないらしい。
Avatar
Docker Desktop みたいに仮想マシンに押し込んだら良いのでは、という気はしますが、それはそれでコンテナにする意味が若干薄れる気もしてきました (edited)
Avatar
omochimetaru 9/26/2023 1:05 AM
個人的には結構薄れてると思ってます IO遅いとかユーザID体系が別になっちゃうとか、macのDockerはなんか似たような別のもの
Avatar
Kishikawa Katsumi 9/26/2023 1:06 AM
ぜいたくに仮想マシンにしてもいいとは思う。ポータブルなコンテナイメージでやり取りできるなら利点はある。
Avatar
omochimetaru 9/26/2023 1:08 AM
そういう意味だと、Linuxイメージでmacでも使えてたのに対して、コンテナになるとmac用のイメージが別途必要で、エコシステムはややこしくなりそうですね
1:09 AM
DockerをLinuxで使うのはサーバサイドのサービスデプロイ用途が一番多いと思うけど、
1:09 AM
そもそもmacでDocker使う用途によって判断が変わるかもなあ
Avatar
Docker、コンテナで実行速度がネイティブと変わらないのも嬉しいけど、今となってはDockerfileでポータブルな実行環境を作れるってところが人気な気がしますね
Avatar
Kishikawa Katsumi 9/26/2023 1:12 AM
Macの用途は手元でCIを作るか、ややこしい依存があるソフトウェアを試したい、の2つがカバーできたらいいと思う。
1:13 AM
VIrtualBoxとVagrantでできなくはないと思うけどめんどうだから。
Avatar
確かにユーザビリティは大きいですね…
Avatar
CI用途だと嬉しそうですね。古いmacOS使って古いxcodebuild使いたい時とか。
3:01 AM
いまはvirtualization.framework使って頑張ってる人を知ってる
Avatar
virtualization.framework で大概のことは問題ないから...
Avatar
Kishikawa Katsumi 9/26/2023 4:07 PM
virtualization.frameworkのmacOSはApple IDが使えないからCI用途にあまり向いてない。動作の確認とかはいいけど。
Avatar
そんな制限があるんですか。 AppleIDってただのソフト的なログインじゃないんですね 仮想環境ではハードウェアのシリアル番号的なものが無い感じなのかな (edited)
Avatar
fastlane とかなら逆に macOS 側で Apple ID でログインすることない気もしますがどうでしょう (provisioning profile のアップデートを Xcode にやらせるなら必要…ぐらい?) (edited)
Avatar
Kishikawa Katsumi 9/27/2023 12:22 AM
いけるのかな。今度やってみるわ。
Avatar
Kishikawa Katsumi 9/27/2023 12:31 AM
https://github.com/traderepublic/Cilicon https://github.com/shapehq/tartelet こういうのもついでに試してみたい。 (edited)
Avatar
逆にどっちかというと iCloud ログインとかできないので動作確認とかがつらそうな感じします (iCloud使ってるものだと) (edited)
Avatar
Kishikawa Katsumi 9/27/2023 12:44 AM
それはたしかつらかったと思う。
Avatar
Apple「Mac もっと買ってください」 (edited)
Avatar
Kishikawa Katsumi 9/27/2023 3:28 AM
めちゃめちゃ買ってるぽよ
Avatar
Swift UIのMenuBarExtraを使ってメニューバーのアプリケーションを作成しているのですが、その際NSEvent.addGlobalMonitorForEvents(matching: .flagsChanged, handler: { _ in })を使おうとしたところメニューバーが開けなくなってしまい困っています。何か解決方法に心当たりのあり方いらっしゃいましたらご教授いただきたいです。(MenuBarExtraの部分は https://sarunw.com/posts/swiftui-menu-bar-app/ を参考にしています) App.swift import SwiftUI @main struct test_MenuBarExtraApp: App { @State var currentNumber: String = "1" init() { NSEvent.addGlobalMonitorForEvents(matching: .flagsChanged, handler: { _ in }) } var body: some Scene { MenuBarExtra(currentNumber, systemImage: "\(currentNumber).circle") { Button("One") { currentNumber = "1" } Button("Two") { currentNumber = "2" } Button("Three") { currentNumber = "3" } Divider() Button("Quit") { NSApplication.shared.terminate(nil) } } } } (edited)
In iOS 16, we can create a mac menu bar app without a need for AppKit. Let's learn how to do that.
Avatar
flagChanged…?
2:07 AM
他のマスクなしでそれだけだと大量のイベントが送られてきてるんでは…?
👀 1
2:11 AM
ちょっとわかんないなあ。
Avatar
そうですね。大量のイベントがハンドラーに流れてしまって普通のUIイベントが上手く動いていないのかなという予想はあるんですが、それを上手く確かめられないのと、解消方法の方針がたてられなくて困ってます
Avatar
これ試してみたんですけど確かにメニューでなくなりますね。
6:32 AM
感じとしては、addGlobalMonitorForEventsMatchingMaskで追加されるRunloopのcallbackが多分何らかの理由でRunloopモードの切り替えを阻害するみたいな感じでNSMenu全般的に動かなくなるんではないかなあと思うんですが
6:33 AM
逆ならわかるんだけど(NSMenuがでているとevent handlerが呼ばれない)、そうではないのでなんか釈然としないですね
Avatar
えっとですね、これ多分 init() で呼んでるからですね。 (edited)
6:47 AM
多分ずっと後で(RunLoop回り始めてから)呼べば多分動きますね
6:48 AM
なぜこういう挙動になるかはちょっとまだわからない
6:51 AM
↑を実装するにはappdeleateつくんないと多分難しいですね。swiftuiの中だけでは厳しいきがする。
Avatar
なるほど。ありがとうございます。その方針で試してみます
👍 1
Avatar
addGlobalMonitorForEventsMatchingMaskは内部でHIToolboxのInstallEventHandlerを使ってるんですが、これがどうやら特定の条件に対してイベントハンドラーを1つしか登録できないようで、2つ目以降はエラーになるっぽいです。
6:48 AM
多分ですが、この条件てのがNSMenuが聞きたい条件と重複していて、NSMenu/AppKitがそれらを登録するよりも前にinit()は呼ばれるのでその結果メニューが動かなくなる、
🙏 1
6:48 AM
ということなんではないかと思います
6:49 AM
init() { DispatchQueue.main.async { NSEvent.addGlobalMonitorForEvents(matching: [.flagsChanged]) { event in } } }
6:50 AM
SwiftUI だけでどうこうは面倒かもしれませんが、app delegateの実装をしたくないのであればDisptchQueue.mainに入れてしまうとかなんらかRunLoopが回った後まで遅らせる手法でもよいかもしれないですね。
6:50 AM
(DisptchQueue.mainのtaskはRunloop.mainのなかで呼ばれるのでこれで遅らせられる) (edited)
Avatar
なるほど。とりあえずAppDelegateの方で試してみたら動かせたのですが、そちらのやり方とも軽く比較してみます。ありがとうございます (edited)
Avatar
AppDelegate とそのコールバックを使えるならそのほうが王道だと思います。↑はhackというか... あんまりお勧めしません。
👍 1
t_kansha 1
Exported 94 message(s)
Timezone: UTC+0