2011-08-15 31 views
9

我有通常以完整的64位模式下運行支持該架構的任何Mac上Cocoa應用程序。強制Cocoa應用程序在32位模式,以開始編程

現在我有一個外部API,它只能作爲一個32位插件加載到主程序中。這個API適用於第三方輸入設備,只有一小部分用戶會購買,但這對於這一小部分很重要。

我的問題是,如果在32位模式下執行該程序只能使用此API。最簡單的做法是:

場景1:要求用戶通過Finder的獲取信息對話框更改其信息,以32位模式啓動程序。

這是很容易做到,但幾乎沒有優雅..

方案2:總是在32位模式下運行,從而避免懲罰98的問題

幾乎沒有什麼我想要做的任何..爲了一個奇特的功能,用戶的百分比。

方案3:自動改變應用程序的啓動屬性,以便它在32位模式下一次啓動時,它被推出,之後每次

方案4:在啓動時,建立正在使用哪個體系結構,則在32位模式下重新發射如有必要

方案3 & 4具有非常小的上記錄的問題如何做到這一點,它米ight讓我陷入麻煩與Mac App Store指南。

到目前爲止,我已經建立:

  • ,使用「牌坊」的命令行工具可以讓我重新開始我的可執行文件在32位模式下
  • 查找腳本不會讓我改變標誌
  • 的「在32位模式下啓動」的標誌由發射服務API(http://blog.timac.org/?p=490
  • 管理,但我還沒有發現任何接口以編程方式更改標誌在發射服務API

到目前爲止,我只能看到這些選項,其中沒有顯得特別大:

  1. 重新推出使用NSTask應用和「牌坊」的命令行工具
  2. 寫入直接進入com.apple。 LaunchServices.plist
  3. 32位插件隔離到它自己的32位唯一的過程,並使用IPC

方案一可以讓我與金管局提交的麻煩。解決方案2在某個階段幾乎肯定會這樣做。從用戶的角度來看,只有解決方案3是完美的,但爲最小的回報增加了大量的複雜性。

任何有關如何「乾淨地」做出合理努力的建議將不勝感激!

+5

爲什麼如果你的應用程序只有32位 - 它是否需要大量的內存(> 2 GB)? –

+1

總是在32位模式下運行,這是一種懲罰? – hamstergene

+0

解決方案3聽起來最好。 – spudwaffle

回答

3

選項5: 創建另一個始終以32位運行的可執行文件,它的唯一目的是驅動32位組件。從主應用程序啓動該可執行文件並使用某種類型的獨立於處理器的io互相通信,可能是套接字。

1

您可以通過編程改變什麼模式,你的應用程序將通過改變設在這裏的plist文件啓動:

~/Library/Preferences/com.apple.LaunchServices.plist

您需要更改位於 /LSArchitecturesForX86_64/[your.app.idenitfier]/Item 1/

  • 關鍵設置它到x86_64將運行在64位
  • 將其設置爲i386將r un in 32位

您可以使用內置的defaults命令或內置的plistbuddy命令對其進行編輯。我從未有過多少運氣獲得一個關鍵的可水平降至與defaults改變,如果我找出plistbuddy語法,我將它張貼。

一旦你擁有了這一切,你可以創建一個簡單的腳本在運行日誌中,測試你的輸入設備的存在(或其他屬性,部門等),並相應地設置啓動模式。

2

我想通了,使用默認設置鍵的方式......

給出一個bash shell變量:

alias="<0000 .... 1234>" #(there is a lot more hex data than that...) 

和包標識符:

bundle="com.mycompany.myprogram" 

可以設置關鍵因此:

defaults write com.apple.LaunchServices LSArchitecturesForX86_64 -dict-add $bundle "($alias, i386)" 

祝你生成二進制別名。我只是從com.plist.dock中竊取_CFURLAliasData,因爲我試圖設置爲啓動32位的程序有一個圖標安裝在擴展塢中。另一種生成別名的方法是,如果你能掌握它,可能是使用程序dockit.c。我一直無法找到該程序。

+0

如果我查看plisteditor pro,別名變量是否是包標識符下的0鍵?我想這可能是。無論如何,我認爲這裏涉及到某種緩存。如果我使用上述Bash方法,則信息對話框的複選框狀態不會顯示它已更改,除非我強制退出Finder。它必須觸發重建它的內部緩存。 看這似乎表明,http://www.thexlab.com/faqs/resetlaunchservices.html –

+0

即使力在quiting我發現特別的應用程序只響應手冊信息對話框蜱。換句話說,即使我運行bash腳本來說32bit,並看到它在UI的勾選框中改變,我的應用程序仍然在64位啓動。我現在要嘗試創建2個.app包的副本。 –

0

我的情況很相似。我使用Ableton Live和Reason作爲rewire奴隸。如果我在32位啓動Ableton,我需要Reason進入32位模式。這就是我所做的。

  1. 製作應用程序的副本,以便能夠快速更改模式。
  2. 調用拷貝32.app(在我的情況Reason32。APP)
  3. 這個新的應用程序中顯示包內容和刪除文件夾的內容(是的,這一切都包含
  4. 現在進入原來的那個),使內容的符號鏈接
  5. 符號鏈接複製到appname32.app包(舊的刪除的舊版本所在的地方)
  6. 使用查找器屬性併爲新副本選擇32位模式。

您現在有2個應用程序,你可以輕鬆地啓動/腳本。

相關問題