문제

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

Cygwin과 gcc?이것을 Visual Studio에 통합할 수 있는 방법이 있나요?

이와 관련하여 Windows SDK를 연결하고 사용하는 방법에 대한 제안 사항이 있습니까?그것은 다른 짐승이지만 Windows DLL에 어셈블리와 링크를 작성하여 해당 호출에 대한 접근성을 제공할 수 있다는 것을 알고 있지만 인터넷 검색이나 단편적인 지침을 얻지 않고는 이 작업을 수행하는 방법을 모르겠습니다.

이런 종류의 일을 하거나 설명할 수 있는 좋은 온라인이나 서적 자료를 알고 있는 사람이 있습니까?

도움이 되었습니까?

해결책

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

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

GNUStep으로 이러한 기능을 테스트하지는 않았지만 충분히 새로운 버전의 gcc를 사용한다면 해당 기능을 사용할 수 있을 것입니다.몇 년 전에는 GNUStep에서 Objective-C++를 사용할 수 없었습니다.그러나 GNUStep은 거의 모든 플랫폼에서 컴파일됩니다.Cocotron은 매우 맥 중심적인 프로젝트입니다.다른 플랫폼에서 컴파일하는 것이 가능할지라도 makefile이 아닌 XCode 프로젝트 파일이 제공되므로 OS X에서만 프레임워크를 컴파일할 수 있습니다.또한 XCode에서 Windows 앱을 컴파일하는 방법에 대한 지침이 제공되지만 다른 플랫폼은 제공되지 않습니다.기본적으로 Cocotron용 Windows 개발 환경을 설정하는 것은 가능할 것입니다. 하지만 GNUStep용 Windows 개발 환경을 설정하는 것만큼 쉽지 않고 스스로 해야 하기 때문에 개발을 한다면 GNUStep이 확실히 좋은 방법입니다. 단지 Windows용이 아닌 Windows용입니다.

그만한 가치가 있는 만큼 Cocotron은 MIT 라이선스에 따라 라이선스가 부여되고 GNUStep은 LGPL에 따라 라이선스가 부여됩니다.

다른 팁

~할 수 있다 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. 귀하의 폴더 경로가 내 폴더 경로와 유사한지 확인하십시오. 그렇지 않으면 오류가 발생합니다

또한:

Cocotron은 Apple Inc.의 Cocoa 문서에 설명된 것과 유사한 크로스 플랫폼 Objective-C API를 구현하는 것을 목표로 하는 오픈 소스 프로젝트입니다.여기에는 AppKit, Foundation, Objective-C 런타임과 CoreGraphics 및 CoreFoundation과 같은 지원 API가 포함됩니다.

http://www.cocotron.org/

WinObjC?iOS용 Windows Bridge(이전 명칭: 'Project Islandwood').

iOS용 Windows Bridge(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에 대한 컴파일러 최적화 및 지원을 추가할 예정입니다.

저는 Cocotron 프로젝트에 대해 여러 가지 감정을 갖고 있습니다.그들이 소스 코드를 공개하고 공유하고 있다는 것은 기쁘지만 가장 쉬운 방법으로 일을 하고 있다고는 생각하지 않습니다.

예.
Apple이 소스 코드를 공개했습니다. 목표-C 런타임, 여기에는 속성 및 가비지 수집이 포함됩니다.그러나 Cocotron 프로젝트에는 Objective-C 런타임의 자체 구현이 있습니다.왜 굳이 노력을 복제해야 할까요?objc.dll 파일을 빌드하는 데 사용할 수 있는 Visual Studio 프로젝트 파일도 있습니다.또는 정말 게으른 경우 Windows의 Safari 설치에서 DLL 파일을 복사할 수 있습니다.

그들은 또한 Apple이 오픈 소스로 제공하는 CoreFoundation을 활용하는 데 신경 쓰지 않았습니다.나는 질문 이에 대해 답변을 받지 못했습니다.

현재 가장 좋은 해결책은 여러 소스(Apple, CocoTron, GnuStep)에서 소스 코드를 가져와 필요한 대로 병합하는 것입니다.많은 소스를 읽어야 하지만 최종 결과를 얻을 가치가 있을 것입니다.

나는 이것이 매우 오래된 게시물이라는 것을 알고 있지만 최근에야 사용할 수 있게 되었고 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 GUI C++와 Objective-C를 모두 하나의 Windows 응용 프로그램에서 성공적으로 엮을 수 있을 것이라고 생각합니다.

확인해 보세요 WinObjC:

https://github.com/Microsoft/WinObjC

Visual Studio + Windows와 통합되는 Microsoft의 공식 오픈 소스 프로젝트입니다.

실험해보고 싶다면 여기에 .NET(Windows)용 Objective-C 컴파일러가 있습니다. qckapp

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

오픈C 플라이트

최신 소스를 다운로드하면 됩니다.CF-Lite를 모두 빌드할 필요는 없으며 objc.sln이라는 솔루션이 있습니다.포함 경로 중 몇 가지를 수정해야 하지만 그러면 문제 없이 빌드됩니다.테스트 프로젝트도 포함되어 있어 일부 목표-c .m 파일이 Visual Studio에서 컴파일되고 작업되는 것을 볼 수 있습니다.한 가지 슬픈 점은 x64가 아닌 Win32에서만 작동한다는 것입니다.이를 지원하려면 x64용으로 작성해야 하는 어셈블리 코드가 있습니다.

Objective C 2.0을 Windows로 이식하려는 최근 시도는 주걱 프로젝트.

읽어보기에서:

주관은 Windows에 ARC 지원을 제공하는 객관적인 C 2.0을 가져 오려는 시도입니다.

이 프로젝트는 OS X 10.8.5와 함께 제공되는 목표 C 런타임 인 ​​OBJC4-532.2의 포크입니다.포트는 MingW 링커와 결합 된 LLVM-Clang을 사용하여 OS X에서 크로스 컴파일 될 수 있습니다.

여분의 작업의 문제인 특정 제한 사항이 있으며 예외 및 블록과 같은 다른 한계는 타사 프로젝트에서 더 심각한 작업에 의존합니다.제한사항은 다음과 같습니다.

• 32비트 전용 - 64비트가 진행 중입니다.

• 정적 연결만 - 동적 연결이 진행 중입니다.

• 폐쇄/차단 없음 - libdispatch가 Windows에서 이를 지원할 때까지

• 예외 없음 - clang이 Windows에서 이를 지원할 때까지

• 이전 스타일의 GC 없음 - 누군가가 관심을 가질 때까지...

• 내부:VTABLE, GDB 지원 없음, 평범한 malloc, 사전 최적화 없음 - 이러한 것들 중 일부는 64 비트 빌드에서 사용할 수 있습니다.

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

프로젝트는 다음에서 사용할 수 있습니다. Github, 그리고 또한 Cocotron 그룹에서 발생한 일부 진행 상황과 문제를 간략히 설명합니다.

GNUStep 받기 여기

MINGW 받기 여기

mingw 설치 Gnustep을 설치 한 다음 테스트하십시오

Visual Studio 환경에 익숙하신 분이라면

소규모 프로젝트:GCC 대형 프로젝트와의 Jgrasp :코코넛론

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

우선 잊어버리세요. GNUStep 도구.어느 것도 아니다 프로젝트 매니저 ...도 아니다 프로젝트센터 IDE라고 할 수 있습니다.존경하는 마음으로, 그것은 다음의 남자들처럼 보입니다. GNUStep 프로젝트는 80년대 후반에 멈춰 있습니다. 다음 단계 처음 등장).

정력

ctags 이후 Objective-C를 지원합니다. r771 (반드시 출시 전 5.9 버전을 선택하고 추가하세요. --langmap=ObjectiveC:.m.h 명령줄로 이동하려면 다음을 참조하세요. 여기), 그러면 적절한 코드 완성/태그 탐색이 가능해집니다.

여기에 짧은 내용이 있습니다. 어떻게 Vim 태그바 플러그인에 Objective-C 지원을 추가하는 방법에 대해 알아보세요.

이맥스

동일하게 적용됩니다 etags 최신 Emacsen과 함께 제공되므로 Emacs로 시작할 수 있습니다. 오브젝티브 C 모드. YASnippet 유용한 템플릿을 제공합니다:

YASnippet objc-mode

그리고 만약 당신이 그보다 더 지능적인 것을 원한다면 기본 태그 기반 코드 완성, 이것 좀 보세요 질문.

CDT 지원하다 Makefile기반 프로젝트:

enter image description here

-- 기술적으로는 즉시 Objective-C 프로젝트를 구축할 수 있습니다(Windows에서는 시그윈 또는 MinGW 툴체인).유일한 문제는 순수하다고 생각되는 것에 대해 많은 오류를 보고하는 코드 편집기입니다. 코드(즉시 코드 검사를 끌 수 있지만 여전히...).적절한 구문 강조를 원하면 다음을 추가할 수 있습니다. 에클림 너의 ~에게 두 가지의 모든 좋은 기능을 즐기세요 그리고 정력 (위 참조).

또 다른 유망한 플러그인은 컬러러, 그러나 아직 Objective-C를 지원하지 않습니다.그래도 기능 요청을 제출해 주시기 바랍니다.

매끄러운편집

매끄러운편집, 중에 다른 기능들 훌륭한 IDE, 하다 지원하다 오브젝티브-C.배우기가 상당히 복잡하지만(Emacs만큼 복잡하지는 않지만) 구매에 신경 쓰지 않는다면 이것이 최선의 선택이라고 믿습니다(가격은 상당히 저렴합니다).

추가적으로, 그것은 이클립스 플러그인 이는 독립 실행형 편집기의 대안으로 사용할 수 있습니다.

KDevelop

소문에 의하면 거기에 KDevelop 반점 (15세인데 누가 신경쓰나요?)개인적으로 아니라고 생각함 KDevelop 비해 기능이 월등합니다 엠막센, 그래서 나는 그것을 시도하는 것을 귀찮게하지 않을 것입니다.


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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top