我還沒有聽到任何權威。說實話,我不認爲蘋果關心那麼多。我給的主題在過去的一些想法,並已經形成了自己的看法,這是我給大家介紹:
名稱前綴的主要目的是爲了避免名稱衝突。這尤其適用於kext包本身,但正如你所提到的,也適用於C++類,它們在內核的OSMetaObject
運行時類型系統中有一個名稱空間。開源代碼的事情是有叉子,所以你無法控制其他人可能用你的代碼做什麼,如果不小心碰到名稱衝突的不兼容叉子構建突然出現,它可能會導致用戶系統出現問題。所以我們試圖避免這種情況,對吧?
所以重點確實是在構建,而不是源代碼。我發現反向DNS前綴的名字無論如何刺激,所以我一直使用#define SaneClassName tld_domain_driver_ClassName
使我的代碼更具可讀性。因爲我已經擴展了這種使用宏,這樣的事情:
#define SaneClassName PREFIXED_NAME(ClassName)
凡PREFIXED_NAME
宏定義正是如此:
可以使NAME_PREFIX
配置選項在構建系統和通過-DNAME_PREFIX=com_example_driver_
將它傳遞給編譯器,這樣如果有人分叉了代碼,它將默認構建失敗,除非它們選擇了合適的前綴。如果您願意,請在#error消息中強調該前綴必須是唯一的。您還需要確保在info.plist和kext二進制文件中結束的包標識符由構建系統根據用戶配置進行類似設置。
如果沒有與項目相關的域名,你可以挑選基於它託管在哪裏(com_github_organisationname_project_),或基於電子郵件地址名稱。如果您擔心項目中的單個開發人員發佈相互衝突的二進制版本,則可以請求他們使用託管其公共分支的位置,電子郵件地址規則或爲其提供「子域名」(com_github_organisationname_project_person_)。
你當然不能,儘管這些努力控制什麼,是KEXT被建立,如果兩個叉被安裝在用戶的計算機上的用戶的系統上加載,並在同一設備匹配。如果它成爲問題,你只需要教育你的用戶。似乎不太可能!
哇,你給了這個有很多想法的 - 偉大的建議,謝謝! – user3814483 2015-04-05 00:18:53