Windows用Objective-C


230

WindowsプラットフォームでObjective-Cを作成する最良の方法は何でしょうか?

Cygwinとgcc?これをVisual Studioに統合する方法はありますか?

それらの線に沿って-このようなもののためにWindows SDKをリンクして使用する方法に関する提案はありますか?それは別の獣ですが、私はWindows DLLでアセンブリとリンクを記述して、それらの呼び出しにアクセスできるようにすることができますが、ググリングして断片的な指示を取得せずにこれを行う方法はわかりません。

このようなことをしたり説明したりするための優れたオンラインまたは本のリソースを知っている人はいますか?


5
iOSでそれを実行しているだけであれば、PM BatyによるiOSビルド環境を使用できます...
Cole Johnson

回答:


146

上記の2つの答えを拡張すると、Objective-Cだけが必要で、Cocoaフレームワークは必要ない場合、gccはどのプラットフォームでも機能します。Cygwinを使用するか、MinGWを入手できます。ただし、Cocoaフレームワーク、または少なくともそれらの妥当なサブセットが必要な場合は、GNUStepとCocotronが最善の策です。

Cocotronは、CoreGraphicsやCoreDataなど、GNUStepが実装していない多くの機能を実装していますが、特定のフレームワークでの実装の完成度を保証することはできません。彼らの目的は、Cocotronを最新バージョンのOS Xで最新の状態に保ち、実行可能なすべてのOS XプログラムをWindowsで実行できるようにすることです。GNUStepは通常、最新バージョンのgccを使用するため、Objective-C ++および多くのObjective-C 2.0機能のサポートも追加されます。

私はこれらの機能をGNUStepでテストしていませんが、十分に新しいバージョンのgccを使用している場合は、それらを使用できる可能性があります。数年前、GNUStepでObjective-C ++を使用できませんでした。ただし、GNUStepはほぼすべてのプラットフォームからコンパイルできます。Cocotronは非常にMac中心のプロジェクトです。他のプラットフォームでコンパイルすることはおそらく可能ですが、メイクファイルではなくXCodeプロジェクトファイルが付属しているため、フレームワークはOS Xですぐにコンパイルできます。また、XCodeでWindowsアプリをコンパイルする手順も含まれていますが、その他のプラットフォーム。基本的には、Cocotron用にWindows開発環境を設定することはおそらく可能ですが、GNUStep用に設定するのは簡単ではありません。自分で作業するので、GNUStepは、 Windowsだけではなく、Windows。

その価値については、CocotronはMITライセンスの下でライセンスされ、GNUStepはLGPLの下でライセンスされています。


1
オープンソースのCocoaフレームワークをいつでも移植できます。CoreFoundationの例。
Cole Johnson、

Core Foundationのすべてがオープンソースではありません。膨大な量がクローズドソースです。
uchuugaka 2013

X'Dなぜこの男がベストアンサーを獲得したのか分からない。彼らはbsの回答用に新しいバッジを作成する必要があります。@michaelの違反はありません。それは興味深い読み物です。
Wolfpack'08

違反はありませんでしたが、念のため、この回答を書いた時点では、Objective-C for Windowsをコンパイルするのに数週間も苦労していて、GNUStepとCocoatronの両方を試してみました。当時のコンパイラのバグと、Windowsではivarが0に初期化されていなかったため、結局、プロジェクトをC ++で書き直すことを余儀なくされました。私は「これらの機能をテストしていません」に言及しましたが、この回答が書かれてから1年未満しかAppleプラットフォームで利用できなかった当時の新しいObjective-C 2.0機能について話していました。 GNUStepに上陸したばかりです。
マイケルバックリー

89

あなたはできる、Windows環境内でのObjective Cを使用します。次の手順を実行すると、問題なく機能するはずです。

  1. 訪問GNUstepのウェブサイトやダウンロードをGNUstep MSYS Subsystem(GNUstepのためのMSYS)、GNUstep Core(GNUstepのライブラリ)、およびGNUstep Devel
  2. これらのファイルをダウンロードしたら、その順序でインストールしてください。そうしないと、構成に問題が発生します
  3. 移動C:\GNUstep\GNUstep\System\Library\Headers\Foundation1、それは確実にFoundation.h存在します
  4. コマンドプロンプトを開いて実行gcc -vし、GNUstep MSYS正しくインストールされていることを確認します(ファイルが見つからないというエラーが発生した場合は、binフォルダーがにあることを確認してGNUstep MSYSくださいPATH
  5. このシンプルな「Hello World」プログラムを使用して、GNUstepの機能をテストします。

    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
  6. コマンドプロンプトに戻りcd、「Hello World」プログラムを保存した場所に戻って、コンパイルします。2

    gcc -o helloworld.exe <HELLOWORLD>.m -I /GNUstep/GNUstep/System/Library/Headers -L /GNUstep/GNUstep/System/Library/Libraries -std=c99 -lobjc -lgnustep-base -fconstant-string-class=NSConstantString
  7. 最後に、コマンドプロンプトから入力helloworldして実行します。

Objective-Cをお楽しみください。


  1. デフォルトのインストールパスを使用しました-コマンドラインを適宜調整してください
  2. あなたのフォルダパスが私のパスと同じであることを確認してください、そうでなければエラーが発生します

1
nasmに使用したgccをすでにインストールしているため、この推奨インストールは私のPCでは機能しませんでした。だから私は修正gcc -o helloworld...しただけc:\gnustep\bin\gcc -o helloworld...でうまくいきました。代替案は、環境変数を変更することです。これは、目的Cを見ただけだったので、実行しなかったものです。最新の答えを得るteshguruに感謝します。
マーティンバーガー

名前の前後のコードのフォーマットを削除することを検討してください。GNUstep MYSYはコードではなく、単なるソフトウェアの名前です。目立つようにしたい場合は、強調することを検討してください。また、何かがタグに接続している場合は、タグ区切り文字の使用を検討してください。ただし、タグ区切りに適切な名前を付ける理由はありません。
Wolfpack'08

使用時yhis c:\ gnustep \ bin \ gcc -o helloworld.exe helloworld.m -I / GNUstep / GNUstep / System / Library / Headers -L / GNUstep / GNUstep / System / Library / Libraries -std = c99 -lobjc- lgnustep-base -fconstant-string-class = NSConstantString動作します
Dalvik

13

また:

Cocotronは、Apple Inc.のCocoaドキュメントで説明されているものと同様のクロスプラットフォームObjective-C APIの実装を目的としたオープンソースプロジェクトです。これには、AppKit、Foundation、Objective-Cランタイム、およびCoreGraphicsやCoreFoundationなどのサポートAPIが含まれます。

http://www.cocotron.org/


4
Cocotronプロジェクトは、XCodeからクロスコンパイルされるように設計されており、Windowsで作成してそこでコンパイルするのではありません。
Dan Udey 2008

2
これは良い答えではありません。CoCotronはMac用であり、OPはWindowsベースのソリューションを必要としているため、OPがこれを「答え」として選択した理由はわかりません。
cbrulak 2009

あなたは正しいです。これを読んだとき、私は少し興奮しすぎました。 Microsoft Windowsのサポートを提供することに重点を置いています。特にNTベースのバージョン、2000からVistaまで。」
Luther Baker、

13

WinObjC?iOS用Windowsブリッジ(以前は「プロジェクトアイランドウッド」として知られていました)。

Windows Bridge for iOS(WinObjCとも呼ばれます)は、Visual Studio / WindowsにObjective-C開発環境を提供するMicrosoftオープンソースプロジェクトです。さらに、WinObjCはiOS API互換性のサポートを提供します。最終リリースは今秋の後半に行われます(ブリッジで、次のVisual Studio 2015 Updateに同梱される新しいツール機能を利用できるようになります)。

ブリッジは、現在の状態にあるオープンソースコミュニティで使用できます。今から秋まで。MITライセンスに基づくオープンソースプロジェクトとしてのiOSブリッジ。プロジェクトの野心を考えると、iOS開発者がWindowsでアプリを簡単に構築して実行できるようになります。

Salmaan Ahmedが、Windows Bridge for iOS http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/に関する詳細な投稿を公開しています。コンパイラ、ランタイム、IDE統合、およびブリッジとは何か、そうでないもの。何よりも、iOSブリッジのソースコードは現在GitHubで公開さています。

iOSブリッジは、x86およびx64プロセッサーアーキテクチャー向けに構築されたWindows 8.1およびWindows 10アプリの両方をサポートします。まもなく、コンパイラーの最適化とモバイルサポートを追加するARMのサポートを追加します。


9

Cocotronプロジェクトについては、さまざまな感情があります。彼らがソースコードを公開して共有してくれてうれしいですが、彼らが最も簡単な方法でやっているとは思いません。

例。
Appleは、プロパティとガベージコレクションを含むObjective-Cランタイムのソースコードをリリースしました。ただし、Cocotronプロジェクトには、objective-cランタイムの独自の実装があります。なぜ努力を重複させるのか?objc.dllファイルのビルドに使用できるVisual Studioプロジェクトファイルもあります。または、本当に怠惰な場合は、Windows上のSafariのインストールからDLLファイルをコピーすることができます。

彼らはまた、Appleによってオープンソース化されているCoreFoundationを利用することを気にしませんでした。これについて質問を投稿しましたが、返答がありませんでした。

現在の最良の解決策は、複数のソース(Apple、CocoTron、GnuStep)からソースコードを取得して、必要なものにマージすることだと思います。多くのソースを読まなければならないでしょうが、それは最終結果の価値があります。


2
要約すると、グループに関する質問に答えないことについて申し訳ありません。APSLは最悪で、ランタイムとCFの両方がその下にあります。
クリストファーロイド

1
APSLの何が悪いのですか?(opensource.apple.com/license/apsl)GPLのように侵襲的ではありません。対象のコードを変更する場合は、そのコードを使用可能にする必要があります。対象となるコードは、たとえばCoreFoundationに加えた変更ですが、実際のプログラムは含まれません。また、変更を明確にマークする必要があります。これは厄介ですが、Appleの高度にテストされたコードを使用することのトレードオフに値するものではありませんか。
Matthieu Cormier

8
私はあなたが終了の仕組みを理解していないと思います、それは彼らがすべての人に一度にできることではありません、コードは条件の下でライセンスされ、それらの条件の下で無期限に使用できます。起こり得ることは、Appleがライセンスに違反したと思う個人/企業を特定できることです。FSFはすでにGPL違反でこれを行っています。あなたは本当にAppleがFSFよりも開発者にとってより友好的だと思いますか?これらの条件が重要ではなく、意味がないと思われる場合は、Appleを合法的に説得して、それらを削除することができます。
クリストファーロイド、

8
AppleはAPSLの変更についてFSFと協力し、FSFはAPSLバージョン2.0をフリーソフトウェアライセンスと見なしていることに注意してください。gnu.org/philosophy/apsl.html
Sean

3
私の見解(BSD、LGPL、MIT、およびその他のライセンスをプロプライエタリ製品で扱ってきた人として)から、AppleのライセンスはGPLよりも制限が少ない-率直に言って、お尻の痛みです。BSD、MIT、またはAPSLを入手できる場合は、GPLではなくそれらを使用します。
ロイドサージェント、

8

これは非常に古い投稿であることは承知していますが、最近利用可能になり、WindowsプラットフォームでほぼすべてのObjective-C 2.0機能を有効にするソリューションを見つけました。

gcc 4.6の登場により、Objective-C 2.0言語機能(ブロック、ドット構文、合成プロパティなど)のサポートがObjective-Cコンパイラに追加されました(詳細については、リリースノートを参照してください)。ランタイムもアップデートされ、Apple独自のObjective-C 2.0ランタイムとほぼ同じように機能します。つまり、これは、MacでClangを使用して合法的にコンパイルされる(ほぼ)すべてのプログラムが、変更なしでgcc 4.6でもコンパイルされることを意味します。

補足として、利用できない機能の1つは、ディクショナリ/配列/その他のリテラルです。これらはすべてClangにハードコードされており、AppleのNSDictionary、NSArray、NSNumberなどのクラスを使用します。

ただし、Appleの広範なフレームワークがなくても問題なく生活できる場合は、そうすることができます。他の回答で述べたように、GNUStepとCocotronはAppleのクラスライブラリの変更されたバージョンを提供しますが、独自に作成することもできます(私の優先オプション)。

MinGWは、WindowsプラットフォームでGCC 4.6を入手する1つの方法であり、MinGW Webサイトからダウンロードできます。インストールするときに、C、C ++、Objective-C、Objective-C ++のインストールが含まれていることを確認してください。オプションですが、MSYS環境のインストールもお勧めします。

インストールすると、Objective-C 2.0ソースを次のようにコンパイルできます。

gcc MyFile.m -lobjc -std=c99 -fobjc-exceptions -fconstant-string-class=clsname (etc, additional flags, see documentation)

MinGWには、-mwindowsフラグを使用してネイティブGUI Windowsアプリケーションをコンパイルするためのサポートも含まれています。例えば:

g++ -mwindows MyFile.cpp

まだ試していませんが、Objective-CクラスをObjective-C ++で可能な限り高い層でラップすると、ネイティブのWindows GUI C ++とObjective-Cをすべて1つのWindowsアプリケーションでうまく組み合わせることができると思います。



6

実験したいだけなら、ここに.NET(Windows)用のObjective-Cコンパイラがあります:qckapp


このプログラムはosc。#import <Foundation / Foundation.h> int main(int argc、const char * argv [])でコンパイルできませんでした{NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog(@”テスト中... \ n..1 \ n ... 2 \ n .... 3”); [プール排水]; 0を返します。}
キランKJ

5

ここでは、Windowsで動作し、Visual Studio 2008 \ 2010でうまく機能する目的のcコンパイラを入手できます。

open-c flite

最新のソースをダウンロードしてください。CF-Liteのすべてをビルドする必要はありません。objc.slnと呼ばれるソリューションがあります。インクルードパスのいくつかを修正する必要がありますが、それで問題なくビルドされます。含まれているテストプロジェクトもあるので、objective-c .mファイルがコンパイルされてVisual Studioで動作しているのを確認できます。悲しいことに、x64ではなくWin32でのみ機能します。それをサポートするためにx64用に作成する必要があるいくつかのアセンブリコードがあります。


Visual Studio 2013を使用してこのプロジェクトをダウンロードして実行したところ、このエラーが30回発生しました。エラー64エラーC2632: 'char'の後に 'bool'が続くのは不正ですC:\ opencflite-code-248-trunk \ include \ c99 \ stdbool.h 20 1 objc
Adam Mendoza

4

Objective C 2.0をWindowsに移植する最近の試みは主観的プロジェクトです。

Readmeから:

主観は、ARCサポートを備えたObjective C 2.0をWindowsに導入する試みです。

このプロジェクトは、OS X 10.8.5に付属するObjective Cランタイムであるobjc4-532.2のフォークです。このポートは、MinGWリンカーと組み合わせたllvm-clangを使用してOS Xでクロスコンパイルできます。

いくつかの制限がありますが、それらの多くは追加の作業の問題ですが、例外やブロックなどのその他の制限は、サードパーティプロジェクトのより深刻な作業に依存しています。制限は次のとおりです。

•32ビットのみ-64ビットが進行中

•静的リンクのみ-動的リンクが進行中です

•クロージャー/ブロックなし-Windowsでlibdispatchがそれらをサポートするまで

•例外なし-Windowsでclangがサポートするまで

•古いスタイルのGCはありません-誰かが気にするまで...

•内部:vtablesなし、gdbサポートなし、単純なmallocのみ、事前最適化なし-これらの一部は64ビットビルドで使用できます。

•現在、パッチを適用したclangコンパイラが必要です。パッチは-fobjc-runtime = subjフラグを追加します

プロジェクトはGithubで利用できます。また、Cocotron Groupには、進行状況と発生した問題のいくつかを概説するスレッドもあります



0

Visual Studio環境に慣れている場合は、

小規模プロジェクト:jGRASPとgcc大プロジェクト:Cocotron

エミュレータはあると聞きましたが、Apple IIエミュレータhttp://virtualapple.org/しか見つかりませんでした。ゲーム限定のようです。


0

まず第一に、GNUStepツールについては忘れてくださいProjectManagerProjectCenterもIDEとは呼ばれません。すべての敬意を払って、GNUStepプロジェクトの人たちは80年代後半に立ち往生しているように見えます(NeXTSTEPが最初に登場したとき)。

Vim

ctagsr771以降のObjective-Cをサポートします(リリース5.9より前のバージョンを選択--langmap=ObjectiveC:.m.hし、コマンドラインに追加してください。ここを参照してください)。これにより、適切なコード補完/タグナビゲーションが得られます。

VimタグバープラグインにObjective-Cサポートを追加する短いハウツーです。

Emacs

同じetagsことが最新のEmacsen に同梱されているため、Emacs Objective C Modeから始めることができますYASnippetは便利なテンプレートを提供します:

YASnippet objc-mode

基本的なタグベースのコード補完よりもインテリジェントなものが必要な場合は、この質問をご覧ください。

日食

CDTは、Makefileベースのプロジェクトをサポートします。

ここに画像の説明を入力してください

-したがって、技術的にはObjective-Cプロジェクトをそのままでビルドできます(Windowsでは、CygwinまたはMinGWツールチェーンが必要になります)。唯一の問題は、純粋なCコード(オンザフライのコードチェックをオフにすることはできますが、それでも...)であると思われるものに対して多くのエラーを報告するコードエディターです。適切な構文強調表示が必要な場合は、EclipseにEclimを追加して、EclipseVimの両方の優れた機能をすべて利用できます(上記を参照)。

別の有望なEclipseプラグインはColorerですが現時点ではObjective-Cをサポートしていません。ただし、機能のリクエストを送信してください。

SlickEdit

SlickEditは、優れたIDEの他の機能の中で、Objective-Cをサポートしてい ます。学ぶのはかなり複雑ですが(Emacsほど複雑ではありません)、購入を気にしないのであれば、これが最良の選択肢だと思います(価格はかなり手頃です)。

さらに、スタンドアロンエディターの代替として使用できるEclipseプラグインがあります。

KDevelop

噂によると、KDevelopの パッチが存在します(15歳ですが、誰が気にしますか?)。私は個人的に、KDevelopEmacsenに比べて機能が優れているとは思わないので、気にしないでください。


上記のツールはすべて移植性があるため、上記はLinux上のObjective-C開発にも当てはまります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.