Windows 용 Objective-C


230

Windows 플랫폼에서 Objective-C를 작성하는 가장 좋은 방법은 무엇입니까?

Cygwin과 GCC? 어떻게 든 이것을 Visual Studio에 통합 할 수있는 방법이 있습니까?

이러한 행을 따라 Windows SDK를 연결하고 사용하는 방법에 대한 제안이 있습니다. 다른 짐승이지만 Windows DLL에서 어셈블리를 작성하고 링크를 통해 해당 호출에 액세스 할 수 있다는 것을 알고 있지만 인터넷 검색을 사용하지 않고 단편적인 방향을 찾지 않고도이 작업을 수행하는 방법을 모르겠습니다.

누구든지 이런 종류의 일을하거나 설명 할 수있는 좋은 온라인 또는 책 자료를 알고 있습니까?


5
iOS 용으로하고 있다면 PM Baty의 iOS Build Environment를 사용할 수 있습니다 .
Cole Johnson

답변:


146

Objective-C 만 원하지만 Cocoa 프레임 워크는 원치 않으면 이전의 두 가지 답변을 확장하면 gcc는 모든 플랫폼에서 작동합니다. Cygwin을 통해 사용하거나 MinGW를 얻을 수 있습니다. 그러나 Cocoa 프레임 워크를 원하거나 적어도 합리적인 수준의 서브셋을 원한다면 GNUStep과 Cocotron이 최선의 선택입니다.

Cocotron은 CoreGraphics 및 CoreData와 같이 GNUStep이 제공하지 않는 많은 기능을 구현하지만 특정 프레임 워크에서 구현이 얼마나 완전한지를 보증 할 수는 없습니다. 그들의 목표는 모든 OS X 프로그램이 Windows에서 실행될 수 있도록 최신 버전의 OS X로 Cocotron을 최신 상태로 유지하는 것입니다. GNUStep은 일반적으로 최신 버전의 gcc를 사용하기 때문에 Objective-C ++ 및 많은 Objective-C 2.0 기능도 지원합니다.

GNUStep에서 이러한 기능을 테스트하지는 않았지만 충분히 새로운 버전의 gcc를 사용하면 해당 기능을 사용할 수 있습니다. 몇 년 전 GNUStep에서 Objective-C ++를 사용할 수 없었습니다. 그러나 GNUStep은 거의 모든 플랫폼에서 컴파일됩니다. Cocotron은 매우 맥 중심의 프로젝트입니다. 다른 플랫폼에서 컴파일하는 것이 가능할 수도 있지만, 메이크 파일이 아닌 XCode 프로젝트 파일이 제공되므로 OS X에서는 즉시 프레임 워크를 컴파일 할 수 있습니다. 또한 XCode에서 Windows 앱을 컴파일하는 방법에 대한 지시 사항도 함께 제공됩니다. 다른 플랫폼. 기본적으로 Cocotron을위한 Windows 개발 환경을 설정하는 것이 가능할 수도 있지만 GNUStep을위한 환경을 설정하는 것만 큼 쉽지는 않습니다. 따라서 독자적으로 작업 할 수 있으므로 GNUStep은 개발중인 경우 반드시 갈 길입니다. Windows와는 반대로 Windows.

그 가치에 따라 Cocotron은 MIT 라이센스에 따라 라이센스가 부여되고 GNUStep은 LGPL에 따라 라이센스가 부여됩니다.


1
오픈 소스 인 Cocoa framworks를 항상 포팅 할 수 있습니다. CoreFoundation이 그 예입니다.
Cole Johnson

모든 핵심 재단이 오픈 소스 인 것은 아닙니다. 엄청난 양이 비공개 소스입니다.
uchuugaka

X'D 나는 왜이 사람이 자신이 말하고있는 것을 시도조차하지 않은 최고의 답변을 얻었는지 모르겠다. 그들은 bs 답변을위한 새로운 배지를 만들어야합니다. @michael의 공격 없음. 흥미로운 글입니다.
Wolfpack'08

공격을받지는 않았지만 기록을 위해이 답변을 쓸 때 Windows 용 Objective-C를 컴파일하기 위해 몇 주 동안 고심하고 있었고 GNUStep과 Cocoatron을 모두 시도했습니다. 당시 일부 컴파일러 버그로 인해 C ++로 프로젝트를 다시 작성해야했으며 Windows에서 ivars가 0으로 초기화되지 않았습니다. "그 기능을 테스트하지 않았습니다"를 언급했지만이 답변이 작성된 1 년 미만 동안 Apple 플랫폼에서만 사용할 수 있었던 새로운 Objective-C 2.0 기능에 대해 이야기하고있었습니다. GNUStep에 막 도착했습니다.
Michael Buckley

89

Windows 환경 내에서 Objective C 사용할 수 있습니다 . 다음 단계를 따르면 제대로 작동합니다.

  1. 방문 그누 스텝 웹 사이트 및 다운로드 GNUstep MSYS Subsystem(그누 스텝에 대한 MSYS), GNUstep Core(그누 스텝에 대한 라이브러리) 및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...효과가있었습니다. 대안은 내가 Objective C를 보았을 때부터하지 않은 환경 변수를 수정하는 것입니다. 포인트 답변까지 teshguru에게 감사드립니다.
Martin Berger

사물 이름 주위의 코드 형식을 제거하십시오. GNUstep MYSY는 코드가 아니며 소프트웨어의 이름 일뿐입니다. 눈에 띄는 것을 원한다면, 그것을 돋보이게 할 수 있습니까? 태그에 무언가가 연결되면 태그 구분 기호를 사용하는 것이 좋습니다. 그러나 태그 구분에 올바른 이름을 넣을 이유가 없습니다.
Wolfpack'08

사용시 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 프로젝트는 Windows에서 작성되지 않고 XCode에서 크로스 컴파일되도록 설계되었습니다.
Dan Udey

2
CoCotron이 Mac 용이고 OP가 Windows 기반 솔루션을 원하기 때문에 OP가 왜 이것을 '답변'으로 선택했는지 잘 모르겠습니다.
cbrulak

당신은 맞습니다-나는 이것을 읽을 때 약간 흥분했습니다. "일반적인 목표는 실행 가능한 플랫폼에서 완벽하게 지원하는 것입니다. 프로젝트는 가능한 한 이식성이 뛰어납니다. 그러나 현재로서는 대부분의 작업은 다음과 같습니다. "Microsoft Windows에 대한 지원을 제공하는 데 중점을 두었습니다. 특히 NT 기반 버전 인 2000에서 Vista까지"
루터 베이커

13

WinObjC? iOS 용 Windows 브리지 (이전의 'Project Islandwood')

iOS 용 Windows 브리지 (WinObjC라고도 함)는 Visual Studio / Windows에 Objective-C 개발 환경을 제공하는 Microsoft 오픈 소스 프로젝트입니다. 또한 WinObjC는 iOS API 호환성을 지원합니다. 이번 가을에 최종 릴리스가 예정되어 있지만 (다리가 곧 출시 될 Visual Studio 2015 업데이트와 함께 제공 될 새로운 툴링 기능을 활용할 수 있음),

현재 상태로 오픈 소스 커뮤니티에서 브리지를 사용할 수 있습니다. 지금과 가을 사이. MIT 라이센스에 따른 오픈 소스 프로젝트로서의 iOS 브리지. 프로젝트의 야망이 주어지면 iOS 개발자가 Windows에서 앱을 쉽게 빌드하고 실행할 수 있습니다.

Salmaan Ahmed는 iOS 용 Windows Bridge 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 runtime에 출시했으며 여기에는 속성 및 가비지 수집이 포함됩니다. 그러나 Cocotron 프로젝트에는 objective-c 런타임 자체 구현이 있습니다. 왜 노력을 복제 귀찮게? objc.dll 파일을 빌드하는 데 사용할 수있는 Visual Studio Project 파일도 있습니다. 또는 게으른 경우 Windows에 Safari를 설치하여 DLL 파일을 복사하면됩니다.

또한 애플이 오픈 소스 한 CoreFoundation을 활용하지 않았다. 이에 대한 질문을 게시 했지만 답변을받지 못했습니다.

현재 최상의 솔루션은 여러 소스 (Apple, CocoTron, GnuStep)에서 소스 코드를 가져 와서 필요한 것으로 병합하는 것입니다. 많은 소스를 읽어야하지만 최종 결과 가치가 있습니다.


2
그룹에 대한 귀하의 질문에 대답하지 않은 것에 대해 유감스럽게 생각합니다.
Christopher Lloyd

1
APSL의 장점은 무엇입니까? ( opensource.apple.com/license/apsl ) GPL처럼 침습적이지 않습니다. 해당 코드를 수정하면 해당 코드를 사용할 수 있어야합니다. 해당 코드는 예를 들어 CoreFoundation에 대한 수정 사항이지만 실제 프로그램은 포함하지 않습니다. 수정 사항을 명확하게 표시해야합니다. 이것은 성가신 일이지만 Apple의 고도로 테스트 된 코드를 사용하는 것의 트레이드 오프가 아닌가?
Matthieu Cormier

8
종료가 어떻게 작동하는지 이해하지 못한다고 생각합니다. 모든 사람에게 한 번에 모두 할 수있는 것은 아니며 코드는 조건에 따라 라이센스가 부여되고 해당 조건에 따라 무기한으로 사용할 수 있습니다. 일어날 수있는 일은 애플이 라이센스를 위반했다고 생각하는 개인 / 회사를 고를 수 있다는 것입니다. FSF는 이미 GPL 위반으로이 작업을 수행하고 있습니다. Apple이 FSF보다 개발자에게 더 친근하다고 생각하십니까? 용어가 비 연속적이고 의미가 없다고 생각하면 Apple 법률을 제거하도록 법적으로 설득 할 수 있습니다.
Christopher Lloyd

8
Apple은 APSL의 변경 사항에 대해 FSF와 협력했으며 FSF는 APSL 버전 2.0을 무료 소프트웨어 라이센스로 간주합니다. gnu.org/philosophy/apsl.html
Sean

3
내 관점에서 (독점 제품에서 BSD, LGPL, MIT 및 기타 라이센스를 다루는 사람으로서) Apple의 라이센스는 GPL보다 덜 제한적입니다. 솔직히 엉덩이에 통증이 있습니다. BSD, MIT 또는 APSL을 얻을 수 있다면 GPL보다 BSD, MIT 또는 APSL을 사용하는 것이 좋습니다.
Lloyd Sargent

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으로 컴파일됩니다.

부수적으로 사용할 수없는 기능 중 하나는 사전 / 배열 / 기타 리터럴입니다. 모두 Apple의 NSDictionary, NSArray, NSNumber 등의 클래스를 사용하기 위해 Clang으로 하드 코딩되어 있기 때문입니다.

그러나 Apple의 광범위한 프레임 워크 없이도 행복하게 살 수 있다면 가능합니다. 다른 답변에서 언급했듯이 GNUStep 및 Cocotron은 수정 된 버전의 Apple 클래스 라이브러리를 제공하거나 자신이 선호하는 옵션을 작성할 수 있습니다.

MinGW는 Windows 플랫폼에서 GCC 4.6을 얻는 한 가지 방법이며 MinGW 웹 사이트 에서 다운로드 할 수 있습니다 . 설치시 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에는 기본 GUI Windows 응용 프로그램을 -mwindows플래그 로 컴파일하는 기능도 포함되어 있습니다. 예를 들면 다음과 같습니다.

g++ -mwindows MyFile.cpp

아직 시도하지는 않았지만 Objective-C 클래스를 가능한 가장 높은 계층에서 Objective-C ++로 래핑하면 하나의 Windows 응용 프로그램에서 기본 Windows GUI C ++와 Objective-C를 모두 얽매일 수 있어야합니다.



6

실험 해보고 싶다면 .NET 용 Objective-C 컴파일러 (Windows)가 있습니다. 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; }
KIRAN KJ

5

Windows에서 작동하고 Visual Studio 2008 \ 2010에서 잘 작동하는 객관적인 c 컴파일러를 얻을 수 있습니다.

오픈 C 프리트

최신 소스 만 다운로드하십시오. 모든 CF-Lite를 빌드 할 필요는 없습니다. objc.sln이라는 솔루션이 있습니다. 포함 경로 중 일부를 수정해야하지만 제대로 빌드됩니다. 테스트 프로젝트도 포함되어 있으므로 visual-studio에서 컴파일되고 작동하는 objective-c .m 파일을 볼 수 있습니다. 한 가지 슬픈 점은 x64가 아닌 Win32에서만 작동한다는 것입니다. 이를 지원하기 위해 x64 용으로 작성해야하는 어셈블리 코드가 있습니다.


Visual Studio 2013을 사용하여이 프로젝트를 다운로드하여 실행했는데이 오류의 30 개의 인스턴스가 있습니다. 오류 64 오류 C2632은 : '부울'다음에 '문자는'불법는 C : \ opencflite 코드-248-트렁크 \ \는 C99 \ stdbool.h 20 일 objc 포함
아담 멘도사

4

최근 Objective C 2.0을 Windows로 포팅하려는 시도는 주관적 프로젝트입니다.

읽어보기에서 :

주관은 ARC를 지원하는 Objective C 2.0을 Windows로 가져 오려는 시도입니다.

이 프로젝트는 OS X 10.8.5와 함께 제공되는 Objective C 런타임 인 ​​objc4-532.2의 포크입니다. 포트는 MinGW 링커와 결합 된 llvm-clang을 사용하여 OS X에서 크로스 컴파일 할 수 있습니다.

추가 작업과 관련하여 많은 제한이 있지만 예외 및 차단과 같은 다른 제한은 타사 프로젝트에서 더 심각한 작업에 의존합니다. 제한 사항은 다음과 같습니다.

• 32 비트 만 – 64 비트가 진행 중입니다

• 정적 링크 만-동적 링크가 진행 중입니다

libdispatch가 Windows에서 지원할 때까지 클로저 / 블록 없음

• 예외는 없습니다-clang이 Windows에서 지원할 때까지

• 오래된 스타일의 GC는 없습니다.

• 내부 : vtables, gdb 지원 없음, 일반 malloc, 사전 최적화 없음 –이 중 일부는 64 비트 빌드에서 사용할 수 있습니다.

• 현재 패치 된 clang 컴파일러가 필요합니다. 패치는 -fobjc-runtime = subj 플래그를 추가합니다

이 프로젝트는 Github 에서 사용할 수 있으며 Cocotron Group에는 진행 상황과 문제의 일부를 설명 하는 스레드 도 있습니다.



0

Visual Studio 환경에 익숙하다면

소규모 프로젝트 : gcc가 포함 된 jGRASP 대규모 프로젝트 : Cocotron

에뮬레이터가 있다고 들었지만 Apple II Emulator http://virtualapple.org/ 만 찾을 수 있습니다. 게임에만 국한된 것 같습니다.


0

우선, GNUStep 도구는 잊어 버리십시오 . 어느 ProjectManagerProjectCenter는 IDE를 호출 할 수 있습니다. 모든 존경심을 가지고, 그것은에서 온 사람처럼 보인다 그누 스텝의 프로젝트에 갇혀있다 후반 80의 (경우 인 넥스트 스텝이 처음 등장).

정력

ctagsr771 이후 Objective-C 지원 (시험판 5.9 버전을 선택하고 추가해야 함)--langmap=ObjectiveC:.m.h 하고 명령 행에 하십시오 ( 여기 참조 )) 코드 완성 / 태그 탐색이 적절합니다.

여기 짧은 Vim tagbar 플러그인에 Objective-C 지원을 추가 방법이 있습니다.

이맥스

etags현대 Emacsen과 함께 제공 되는 것도 마찬가지 이므로, Emacs Objective C Mode로 시작할 수 있습니다 . YASnippet 은 유용한 템플릿을 제공합니다.

YASnippet Objc 모드

기본 태그 기반 코드 완성 보다 더 지능적인 것을 원한다면 이 질문을 살펴보십시오. .

CDT 는 다음과 같은 Makefile기반 프로젝트를 지원 합니다.

여기에 이미지 설명을 입력하십시오

따라서 기술적으로 Objective-C 프로젝트를 즉시 구축 할 수 있습니다 (Windows에서는 Cygwin 또는 MinGW 툴체인 이 필요함 ). 유일한 문제는 순수한 C 코드 라고 생각하는 것에 대해 많은 오류를보고하는 코드 편집기입니다 (즉석에서 코드 검사를 끌 수는 있지만 여전히 ...). 적절한 구문 강조를 원한다면 EclipseEclim 을 추가 하고 EclipseVim 의 모든 좋은 기능을 즐길 수 있습니다 (위 참조).

또 다른 유망한 Eclipse 플러그인은 Colorer 이지만 아직 Objective-C를 지원하지 않습니다. 기능 요청을 자유롭게 제출하십시오.

매끄러운 편집

SlickEdit , 중 다른 기능 좋은 IDE의, 수행 지원 Objective-C를 합니다. 배우기가 상당히 복잡하지만 (Emacs만큼 복잡하지는 않지만) 구입하는 것이 마음에 들지 않으면 이것이 최선의 선택이라고 생각합니다 (가격이 매우 저렴합니다).

또한 독립형 편집기의 대안으로 사용할 수 있는 Eclipse 플러그인 이 있습니다.

KDevelop

소문에 따르면 KDevelop 패치 (15 살이지만 누가 관심이 있습니까?)가 있습니다. 나는 개인적으로 KDevelopEmacsen 과 비교하여 기능 우월 하다고 생각하지 않으므로 시도하지 않아도됩니다.


위에서 언급 한 모든 도구는 이식성이 뛰어 나기 때문에 위의 내용은 Linux에서의 Objective-C 개발에도 적용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.