Carbon Interface/ja
│ Deutsch (de) │ English (en) │ 日本語 (ja) │
This article applies to macOS only.
See also: Multiplatform Programming Guide
概要
Carbon は macOS のネイティブAPIの一つです(訳注: 歴史的な事情で、マックのウィンドウシステムは複数のフレームワーク — ライブラリの集合体 — を持っています。現在では Carbon の他に Cocoa フレームワークが用いられています)。
Other Interfaces
- Lazarus known issues (things that will never be fixed) - A list of interface compatibility issues
- Win32/64 Interface - The Windows API (formerly Win32 API) interface for Windows 95/98/Me/2000/XP/Vista/10, but not CE
- Windows CE Interface - For Pocket PC and Smartphones
- Carbon Interface - The Carbon 32 bit interface for macOS (deprecated; removed from macOS 10.15)
- Cocoa Interface - The Cocoa 64 bit interface for macOS
- Qt Interface - The Qt4 interface for Unixes, macOS, Windows, and Linux-based PDAs
- Qt5 Interface - The Qt5 interface for Unixes, macOS, Windows, and Linux-based PDAs
- GTK1 Interface - The gtk1 interface for Unixes, macOS (X11), Windows
- GTK2 Interface - The gtk2 interface for Unixes, macOS (X11), Windows
- GTK3 Interface - The gtk3 interface for Unixes, macOS (X11), Windows
- fpGUI Interface - Based on the fpGUI library, which is a cross-platform toolkit completely written in Object Pascal
- Custom Drawn Interface - A cross-platform LCL backend written completely in Object Pascal inside Lazarus. The Lazarus interface to Android.
Platform specific Tips
- Android Programming - For Android smartphones and tablets
- iPhone/iPod development - About using Objective Pascal to develop iOS applications
- FreeBSD Programming Tips - FreeBSD programming tips
- Linux Programming Tips - How to execute particular programming tasks in Linux
- macOS Programming Tips - Lazarus tips, useful tools, Unix commands, and more...
- WinCE Programming Tips - Using the telephone API, sending SMSes, and more...
- Windows Programming Tips - Desktop Windows programming tips
Interface Development Articles
- Carbon interface internals - If you want to help improving the Carbon interface
- Windows CE Development Notes - For Pocket PC and Smartphones
- Adding a new interface - How to add a new widget set interface
- LCL Defines - Choosing the right options to recompile LCL
- LCL Internals - Some info about the inner workings of the LCL
- Cocoa Internals - Some info about the inner workings of the Cocoa widgetset
参考
- macOS Programming Tips/ja - macOS
- Carbon interface FAQ/ja - Carbon インターフェースについてよくある質問
- Carbon interface internals - If you want to help improving the Carbon interface
必要なもの
Carbon ウィジェットセットは、現在のところ、macOS でのデフォルトのウィジェットセットです。インストールの方法については、Installing Lazarus on macOSをご覧下さい(訳注: 以下にあるように、Lazarus snapshot を入手すれば簡単です。Sourceforge等にある0.9.26以降の安定バージョンも、macOS 用は Carbon版です)。
Carbon版Lazarusを入手する
注: Lazarus スナップショットのインストールを行う場合は、この節と次の節を飛ばしても構いません。スナップショットにはCarbon ウィジェットセットのソースとコンパイル済みのユニットが含まれています。
- macOS用SVNをインストールする:Martin Ottがよいパッケージを公開してくれています。他にも、finkを使って SVNクライアントを入れることができます。VersiontrackerにはGUI版のSVNクライアントがあります。
- Installing_Lazarus#Downloading_Lazarus_SVNに従って操作して下さい。
- Lazarusを走らせます。IDEが起動し、一つの空フォームからなる新しいプロジェクトができます。このプロジェクトを適当な名前で保存して下さい。以下の例では /Users/<yourUsername>/pascal/test/project1.lpi という名前だと仮定します。
Makeファイルを使って Carbon インターフェースをコンパイルする
0.9.25 から Carbon ウィジェットセットがデフォルトのmacOS用ウィジェットセットになりました。そのため、この操作は最早必要ではありません(訳注: 0.9.24まではgtkウィジェットセットがデフォルトでした)。
ターミナルでこうタイプします:
make lcl LCL_PLATFORM=carbon
Makeファイルを使って Carbon版Lazarus IDE をコンパイルする
Lazarus 0.9.25 以降が必要です。
ターミナルでこうタイプします:
make all LCL_PLATFORM=carbon OPT="-k-framework -kCarbon -k-framework -kOpenGL"
Leopard 10.5.x では、Apple's developer pages: http://developer.apple.com/qa/qa2007/qa1567.html
に述べられているように、こうなります:
make all LCL_PLATFORM=carbon OPT="-k-framework -kCarbon -k-framework -kOpenGL -k'-dylib_file' \ -k'/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib'"
Carbon IDEでの注意点
- You must run Lazarus via lazarus.app を通して Lazarusを起動しなければいけません(訳注: ファインダで「UNIX実行ファイル」と表示される80MB程度のファイルではなく、Lazarusアイコンのついた「アプリケーション」と表示される方)。
- エディタがモノスペースフォントを使っていることを確かめて下さい。Editor Options ダイアログで確認できます。"Monaco" フォントがおすすめです(訳注: Lazarusに限らず、エディタの日本語処理問題は舶来アプリケーションの鬼門です。Bug Tracking/jaをご覧下さい)。
Lazarusを使って Carbon インターフェースをコンパイルする
ここで、Lazarusが /Users/<yourUsername>/pascal/lazarus/ にインストールしてあるとします。
- Lazarusを起動します。
- Tools -> Options -> Files -> Lazarus Directory を /Users/<yourUsername>/pascal/lazarus/ に変更します(訳注: 以前の版では/usr/local/share/lazarus/に導入されていました。現在、デフォルトでは /Developer/lazarus/に導入されます。アップデートの際忘れずにこの項目を変更して下さい。)
- Tools>Configure "Build Lazarus"> を次のようにセットして下さい。
- 0.9.24 では、
-k-framework -kCarbon -k-framework -kOpenGL
を'Options' に追加して下さい。そうしないと、リンク中に「未解決のシンボル」エラーが発生します(_ActivateWindow のような Carbon のシンボルです)。
- Tools>Build Lazarus -- これで Carbon インターフェースがコンパイルされ、.ppuファイルが /Users/<yourUsername>/pascal/lazarus/lcl/units/powerpc-darwin と /Users/<yourUsername>/pascal/lazarus/lcl/units/powerpc-darwin/carbon に作られます。
初めてのネイティブ Carbon アプリケーション
コンパイラオプション
Project > Compiler Options > Paths > LCL Widget Type を carbon にセットします。
これで、エラーなしにプロジェクトをコンパイルできるようになったはずです。実際に、project1 という実行ファイルができ上がりますが、これは起動してもフォーカスを当てることができません。というのも、macOSがいくつかの隠しリソースファイルを必要とするからです。
Leopard 10.5での注意: フォーラムthis で論議されたように、Leopard では次のリンカパラメタをプロジェクトに追加する必要があります:
-dylib_file '/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib'
(Project > Compiler Options > Linker > Pass additional options to the linker にこれを追加する場所があります)
アップルリソースファイルを作る
注: 0.9.25 Lazarus から、以下のツールを自分でコンパイルしなくても、アプリケーションバンドルを作ることができるようになりました。それに対応するボタンは Project > Project Options... > Create Application Bundle です。
コマンドラインツール:
IDE で /Users/<yourUserName>/pascal/lazarus/components/macfiles/examples/createmacapplication.lpi を開き、コンパイルします。
適当なターミナルアプリケーションを起動して、タイプします:
cd /Users/<yourUserName>/pascal/project1/ /Users/<yourUserName>/pascal/lazarus/components/macfiles/examples/createmacapplication project1 ln -s ../../../project1 project1.app/Contents/MacOS/project1
これでプログラムを起動することができるようになります(オプションのUse Application Bundle for running and debugging (darwin only)をチェックします)。IDEからでも、ファインダでアイコンをクリックしても、macOS 標準のTerminal.appで "open project1.app" としてもかまいません。
Tip: GTK実行ファイルからアプリケーションバンドルを生成するスクリプトが macOS Programming Tipsにあります。これに手を入れれば、Carbon実行ファイルに使えるようになります (X11で実行ファイルを起動する為の4命令を取る)。ここにはCarbonアプリケーション用に若干の改善を施したものがあります。
ユニバーサルバイナリを作る
Lazarus が作るアプリケーションは一種類のCPU向けですが、macOSでは、PowerPCとIntel CPUがあり得ます。ユーザのマックがどちらのCPUを用いていても同一のプログラムを実行できるように、ユニバーサルバイナリを作って配布したくなるかもしれません。このためには、配布したいアプリケーションを、PowerPCとIntelをターゲットにして、それぞれコンパイルしないければなりません。次に、コンパイルされたそれぞれのCPU向けバイナリを一緒にまとめる必要があります。そのためには macOSのプログラムである lipo を用います(Lazarusが必要とする他のツールと一緒に、Developer Tools に入っています)。例えば、アプリケーション 'myproj' の PowerPC版実行ファイルをフォルダ 'ppc' に、Intel版実行ファイルを 'intel' に置いてあるとします。この二つを一緒にするには、次のコマンドを走らせます:
lipo -create ./ppc/myproj ./intel/myproj -output ./myproj
これで myproj が新しくできますから、これを .app フォルダにコピーします。