sugiutaさんのtutorialのCFNotificationCenterAddObserverについて | Tweak開発 | フォーラム

スポンサーリンク

フォーラム

このフォーラムでは、r/jailbreakなどのコミュニティがない日本でも脱獄に関する質問などができるフォーラムです。
使い方としては、コメントしたい内容があげられている記事に関係ない場合にこのフォーラムをお使いください。
あげられている記事に関係する場合は、ぜひそちらにコメントしてください。

ルール

Tweakの紹介

質問形式

必要情報

質問する際には、デバイスのモデル名とOSのバージョンを載せてください。

iPhone XS iOS 13.2.3
Apple TV 4 tvOS 13.3
Apple Watch watchOS 13.4

エラー内容

エラー内容の対処法などを質問する際には、エラー画面のスクショを載せてください。(画像はImgurなどを使ってリンクを作成してください。)
そしてエラー全文を文字として載せてください。(長くなる場合はPastebinなどを使ってリンクを作成してください。)

名称に関して

いろいろなツールなどがありますが、その際にはできるだけ略称や敬称ではなく正式名称で載せてください。
unc0ver > u0
checkra1n > ra1n




アカウント登録

このフォーラムではアカウント登録をすると簡単に返信の通知を受け取ることができます。
そしてログインしていないアカウントでの返信はスパム対策のため一部承認制になる場合があります。

sugiutaさんのtutorialの...
 
Share:
Notifications
Clear all

sugiutaさんのtutorialのCFNotificationCenterAddObserverについて  

  RSS

 くらげ
(@くらげ)
ゲスト
参加: 1か月 前
投稿: 3
08/06/2020 3:05 am  

sugiutaさんのGitHubにあるtutrialのTweak.xmのほとんどは理解できたのですが、以下のコードがわかりませんでした。

このコードではなにをやっているのでしょうか?

CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL,(CFNotificationCallback)loadPrefs, CFSTR("com.sugi.test/loadPrefs"), NULL, CFNotificationSuspensionBehaviorDeliverImmediately);


引用解決済
sugiuta
(@sugiuta)
Active Member
参加: 1か月 前
投稿: 8
08/06/2020 3:13 am  

これは簡単にいうとRespringをしなくてもNotificationCenterによってDockの透明度を変えることができるようにするためのコードです。

 


返信引用
 くらげ
(@くらげ)
ゲスト
参加: 1か月 前
投稿: 4
08/06/2020 3:18 am  

なるほど裏で通知というAppleの正規プログラムを動かすことで、更新するという感じですかね?

 

たとえばHomePlusがリアルタイムでアイコンの位置が変わっていきますが、これはまた違うのでしょうか?

This post was modified 1か月 前 by くらげ

返信引用
sugiuta
(@sugiuta)
Active Member
参加: 1か月 前
投稿: 8
08/06/2020 3:22 am  

そうですね、SpringBoardでRespringを行わずに変更できるものにはNotificationCenterが使われてます。


返信引用
 くらげ
(@くらげ)
ゲスト
参加: 1か月 前
投稿: 4
08/06/2020 3:32 am  

引数に関しての質問です。

1,2,5,6に関しては固定なのでしょうか?

3,4で自分のコードを実行させているのでしょうか?

  1. CFNotificationCenterGetDarwinNotifyCenter()
  2. NULL
  3. (CFNotificationCallback)loadPrefs
  4. CFSTR("com.sugi.test/loadPrefs")
  5. NULL
  6. CFNotificationSuspensionBehaviorDeliverImmediately

返信引用
sugiuta
(@sugiuta)
Active Member
参加: 1か月 前
投稿: 8
08/06/2020 9:29 am  

大体は固定にしちゃって大丈夫かと。3は自分のコードを実行させてます。4はPostNotificationのstringです。

3はloadPrefsに着目してもう一度Tweak.xm を見てみてください。4はRoot.plistを見てみてください。察しのいいくらげさんならわかると思います。

 

This post was modified 1か月 前 3 times by sugiuta

返信引用
 くらげ
(@くらげ)
ゲスト
参加: 1か月 前
投稿: 4
08/06/2020 1:24 pm  

ありがとうございます。概要がつかめたと思います。

sugiutaさんのソースコードだと第4引数がCFSTRなのですが、UnSubのほうを見てみるとCFStringRefを使用しています。

これは何が違うのでしょうか?

This post was modified 1か月 前 by くらげ

返信引用
 くらげ
(@くらげ)
ゲスト
参加: 1か月 前
投稿: 4
08/06/2020 1:34 pm  

あーおそらくわかりました。

まずコードが少し違うようで、上はいわゆるプログラミングでキャストと呼ばれる変換のコードで、NSStringをCFStringRefに変換しているようです。

そして下はただのString(文字列)を渡すとCFStringRefという型で帰ってくるというメソッドのようです。

(CFStringRef)@"com.sugi.test/loadPrefs"

CFSTR("com.sugi.test/loadPrefs")

 

 

そしてGitHubでCFStringRef , CFSTR周りのCoreFoundationを解説してくれている人がいました。その中のこのコードを参考にしました。

CFStringRef cfString = CFSTR("CoreFoundation"); (GitHub)

 


sugiuta 件のいいね!
返信引用
sugiuta
(@sugiuta)
Active Member
参加: 1か月 前
投稿: 8
08/06/2020 6:55 pm  

すごい、初めて知った。何となく使ってたから勉強になった!


返信引用
 くらげ
(@くらげ)
ゲスト
参加: 1か月 前
投稿: 1
09/06/2020 2:26 pm  

しらなくてもいいこともありますが、こういう細かいのを知るとさらに開発がうまくいくかもしれませんね^ ^

あとCFStringRefCFSTRどっちがいいか問題は自分の浅いプログラミング歴からいうとキャストであるCFStringRefの方がいいのかなとも思います。どちらもプログラミングのコスト(処理の重さ)は同じだと思ウノですが、メソッドであるCFSTRの方だとソースコードをみた際に何を返してくれるメソッドか一目でわからないのでCFStringRefの方がいいような気がします。

 

海外の開発者の方もCFStringRef派の方が多い気がします。


返信引用

返信する


 
Preview 0 Revisions Saved

スポンサーリンク
シェアする
zundaをフォローする
ZundaHack
タイトルとURLをコピーしました