LinkBack Developer's Guide 한글

OSXDEV

Jump to: navigation, 찾기

  이 문서는 [http://www.linkbackproject.org] 에서 제공하는 LinkBack Developer’s Guide을 기본으로 하며 임의로 필요하다고 생각되는 부분을 추가하고 필요 없는 부분을 조금 삭제하였다.

목차

[편집] 링크백에 대하여

  링크백이란, Mac OS X의 프로그램들이 서로 붙여넣기/복사 한 자료들을 수정/업데이트하기 쉽게 하는 오픈소스 기술로, 수정/업데이트 시도시 자동적으로 해당 프로그램이 실행되며 필요한 작업을 수행하도록 하는 기술이다. 이것이 이루어지는 과정은 다음과 같다:

  • 처음에 사용자가 어느 한 프로그램에서 자료를 복사할 때 후에 수정을 위한 ‘링크백데이터’가 같이 pasteboard에 복사가 되며, 이 프로그램을 ‘server application’이라고 한다. 이 ‘링크백데이터’는 나중에 수정을 할 때 필요한 모든 자료를 갖고 있어야 한다.
  • 사용자가 복사한 자료를 다른 프로그램에 붙여넣기 할 때에 위에서 복사된 ‘링크백데이터’가 같이 붙여넣기 되어진다. 이 프로그램을 ‘client application’이라고 한다.
  • 나중에 사용자가 붙여넣기 한 자료를 수정하고 싶을 때에는 그 자료를 더블클릭 하거나 메뉴에서 한 아이템을 선택하여 수정할 수 있으며, 그런 이벤트가 발생하면 저장되어있는 ‘링크백데이터’를 이용하여 자동적으로 해당되는 server application을 찾아내고 실행시키며, 그 server application에 ‘링크백데이터’를 보낸다.
  • 이 server application은 적합한 수정창을 띄우며, 수신된 링크백데이터를 원본데이터로 삼고 수정을 가능하게 한다.
  • 수정이 끝나고 저장을 하면 새로운 ‘링크백데이터’를 client application에 전송한다.
  • Client application은 새로운 ‘링크백데이터’를 저장하며 원본 자료가 있던 자리에 새로 업데이트 된 자료를 집어넣는다.

이제부터 client application또는 server application으로 자격을 갖출 수 있도록 하는 자세한 내용들을 다루겠다.

[편집] 링크백을 추가하기

  어떤 프로그램이 server/client application으로 작동하기 위해서는 기본적으로 LinkBack framework가 추가되어야 한다. 기본적으로 여기서 설명하는 내용들은 가장 최신버젼의 Xcode를 사용한다는 전제하에 있다. 링크백을 추가하기 위해서는 다음과 같은 과정들을 거쳐야 한다:

  1. 프로젝트에 LinkBack framework를 추가한다.
  2. Copy phase를 추가하여 빌드된 프로그램에 LinkBack이 포함되도록 한다.

[편집] 프로젝트에 LinkBack framework추가하기

  우선 프로젝트에 LinkBack framework를 추가하기 위해서는 LinkBack framework의 바이너리 파일이 필요하다. 이 바이너리 파일은 직접 LinkBack project 파일을 이용하여 빌드할 수도 있지만, LinkBack distribution package에 포함되어있는 미리 빌드된 바이너리파일을 갖다써도 된다. 이 바이너리 파일은 언제나 일정한 장소 있도록 유지시켜줘야 나중에 프로젝트를 다시 빌드할 때에 Xcode가 LinkBack framework를 알아서 찾아서 포함시킬 수 있음을 유념해야 한다. 다시말해 Xcode는 언제나 LinkBack framework를 포함하는 프로그램을 빌드할 때 그 경로의 바이너리를 갖다 쓴다. 그러므로 만약에 나중에 링크백의 버젼이 업데이트되거나 하는 등의 일이 발생하여 LinkBack framework를 바꿔야 할 때, 이 폴더에 새로 빌드된 바이너리 파일을 집어넣어주고 LinkBack framework를 포함하는 프로그램을 빌드해주면 알아서 새로운 버젼의 LinkBack framework로 빌드가 될 것이다. 어찌되었든 위의 바이너리 파일이 준비가 되면 이것을 프로젝트에 포함시키는 것은 간단하다. 그냥 드래그하여 Xcode의 Linked Frameworks폴더 밑에다가 드랍해주면 된다(그림 1). 이 때 이것저것 물어보는 시트가 하나 뜨는데, 기본 셋팅으로 그냥 확인을 눌러주면 된다. 이렇게 하면 프로젝트에 LinkBack framework가 추가된 것이다.

Image:linkback_hjn_img1.png

(그림1) LinkBack framework가 추가된 모습

[편집] Copy Phase를 추가하여 빌드된 프로그램에 LinkBack이 포함되도록 하기

  빌드된 프로그램에 LinkBack이 포함되지 않으면 실행되지 않으므로 LinkBack framework가 포함되도록 설정해주어야 한다. 이렇게 하기 위해서는 다음과 같은 과정을 거쳐야한다:

Image:linkback_hjn_img2.png

(그림 2) New Copy Files Build Phase

  1. (그림 2)와 같이 타겟에서 해당 프로그램 타겟을 선택한 후, 메뉴에서 Project->New Build Phase->New Copy Files Build Phase를 선택한다.
  2. “Copy Files Phase” 정보 패널이 뜨는데 (그림 3)과 같이 “General”탭에서 “Destination” 팝업메뉴에서 “Frameworks”를 선택한다.
    Image:linkback_hjn_img3.png
    (그림 3) Copy Files Phase 정보 패널
  3. 패널을 닫고나면 (그림 4)와 같이 Target->프로그램이름->Copy Files가 생긴다.
    Image:linkback_hjn_img4.png
    (그림 4) Copy Files
  4. 이 자리에다가 위에서 링크한 LinkBack framework를 드래그하여 추가시킨다(그림 5).
    Image:linkback_hjn_img5.png
    (그림 5) LinkBack framework를 드래그한다.

  위의 과정을 거치면 빌드한 프로그램에 LinkBack framework가 추가된다. 빌드된 프로그램의 번들 안의 Frameworks폴더에 LinkBack.framework번들이 추가된 것을 확인하여 확실히 추가되었음을 확인하는 것이 좋다.

[편집] Server Application을 만들기 위한 작업

[편집] 정해야 할 사항들

  Server application을 만들기 위해서는 두가지를 미리 생각해 놓아야 한다. 첫번째로는 서버의 고유한 이름을 정해야 한다. 이것은 다른 프로그램과 충돌하지 않도록 고유해야 하므로 짧은 글자 수의 이니셜등의 중복될 수 있는 이름은 피하는 것이 좋다. 참고로 하나의 server application은 여러개의 이름에 반응할 수도 있다. 두번째로는 위에서 언급했던 링크백데이터로 무엇이 들어갈지 결정하는 것이다.

[편집] 링크백데이터

  Server application에서 데이터를 pasteboard로 복사할 때 원래의 다른 데이터와 함께 이 링크백데이터가 같이 복사되며 client application에서 붙여넣기 할 때에 이 링크백데이터가 같이 저장된다. 나중에 이 링크백데이터를 이용하여 수정작업이 이뤄질 수 있어야 한다. 그러므로 이 링크백데이터에는 수정작업이 이뤄지기 위해 필요한 모든 데이터가 포함되어야 한다. 이 링크백은 다음과 같은 사항이 고려되어야 한다:

  1. 이 데이터는 pasteboard에서 지원하는 array, dictionary, string, number, 또는 data object로만 구성되어있어야 한다.
  2. 오랜 시간이 지나도 이 데이터를 수정할 수 있어야 하므로 데이터가 만들어진 시점의 버젼 정보가 들어가있어야 정확한 수정이 이루어질 수 있다.
  3. 다른 데이터로의 링크만을 포함할지, 그 데이터 자체를 포함할지 결정해야 한다. 예를 들어 어느 데이터베이스에 의존하여 업데이트가 되는 자료라면 그 데이터베이스로의 링크만 걸어놓아 후에 데이터베이스에서 자료를 읽어오는 방식으로 만들어야 할 것이며, 그래픽 데이터와 같이 그 데이터 자체를 수정하는 작업이 필요하다면 데이터를 통째로 보관하여 원본파일이 없어도 수정할 수 있게 하는 것이 옳을 것이다.

[편집] 코딩

다음과 같은 작업을 수행하여 기존의 프로그램을 server application으로 만들 수 있다:

  1. Info.plist파일에 LinkBack 아이템들을 추가한다.
  2. 프로그램 시작과 함께 LinkBack 수정 요청을 감시하도록 한다.
  3. Copy & Cut 작업에서 알맞은 LinkBack데이터가 들어갈 수 있도록 코드를 수정한다.
  4. LinkBack수정 요청이 들어오면 알맞게 대처할 수 있도록 필요한 수정을 가한다.
  5. Client application으로 수정된 데이터를 다시 전송하도록 만든다.
  6. Client application의 비정상적인 종료등의 접속이 끊어지는 상황에 대처할 수 있게 한다.

[편집] Info.plist 파일에 LinkBack 아이템들을 추가하기

  우선 Info.plist을 찾는다. 이 리스트를 찾는 방법을 아는 사람은 이 부분을 넘겨도 좋다. 모르는 사람들은 다음과 같은 절차를 따르면 된다:

  1. (그림 6)와 같이 프로그램의 Target에서 Get Info를 클릭한다.
    Image:linkback_hjn_img6.png
    (그림 6) Target->Get Info
  2. Preference 탭에서 (그림 7)과 같이 하단부분의 Open Info.plist as File을 클릭한다.
    Image:linkback_hjn_img7.png
    (그림 7) Preference -> Open Info.plist as File

이렇게 하여 Info.plist파일을 열었다면 다음과 같이 두개의 키값을 추가한다.

  1. LinkBackServer
      이 키값은 위에서 정한 서버의 고유의 이름을 포함한다. 만약에 실행되고있는 프로그램중에 데이터를 수정할 수 있는 프로그램이 없는 경우 드라이브에서 이 이름으로 프로그램을 찾아서 열게 된다. 만약에 여러 이름에 반응할 수 있도록 프로그램을 설계한다면 이것이 string의 배열이 될 수도 있다.
  2. LinkBackApplicationURL
      만약에 이 프로그램으로 만들어진 데이터가 있으나 그 프로그램 자체가 없는 경우 이 키값에 들어있는 URL주소를 다이얼로그로 표시한다. 즉, 이 URL은 이 프로그램에 대한 정보를 찾을 수 있는 주소여야한다.

[편집] LinkBack 수정 요청 감시하기

  다른 client application에서 수정요청을 보낼때 그것을 받아내기 위해서는 우선 요청에 대응하는 object가 필요하다. 이 object는 프로그램이 켜질때부터 시작하여 끝날때까지 계속 존재하는 object이며, LinkBack.h에 정의되어있는 LinkBackServerDelegate 프로토콜에 맞게 만들어져야 한다.

  다음으로는 수정요청에 대응하겠다는 관심의 표현으로 다음과 같은 코드를 집어넣는다:

[LinkBack publishServerWithName: 서버이름 delegate: 위에서_정한_delegate_object];

  이것은 프로그램이 시작하자마자, 다른 이벤트를 받아들이기 전에 실행되어야 한다. 이 코드를 넣기에 좋은 장소중 하나는 applicationWillFinishLaunching: 메소드안이다. 참고로 +retractServerWithName: 메소드로 언제든지 수정요청 감시를 중단할 수 있다.

[편집] Pasteboard 작업에 링크백데이터 추가하기

  복사/잘라내기작업을 할 때에 언제나 링크백데이터가 같이 추가되도록 하여야 한다. 후에 다른 프로그램에서 붙여넣기를 할 때에 링크백을 지원하면 이 데이터가 같이 붙여넣기가 되어지며, 링크백이 지원되지 않는다면 이 데이터는 저장되지 않는다. 이것이 가능하게 하려면 다음의 두가지를 만족해야 한다.

  1. Pasteboard에 집어넣는 데이터 종류 리스트에 LinkBack data를 추가한다. NSPasteboard의 -declareTypes:owner: 에서 지원하는 데이터 종류 리스트에 LinkBackPboardType을 추가시킨다.
  2. 실제로 pasteboard에 데이터를 쓸 때 LinkBack 데이터를 만들어 제공한다. 코코아는 immediately, lazily 두가지 방법으로 pasteboard에 데이터를 쓰도록 허용하므로, 둘중에 원하는 방법으로 공급하면 된다.

  LinkBack.h에 있는 LinkBackData 분류의 NSDictionary의 여러 메소드중 하나를 이용하여 링크백데이터를 만들면 된다. 이중 가장 간단한 메소드를 예로 들어 다음과 같이 사용할 수 있다:

[NSDictionary linkBackDataWithServerName: 서버이름 appData: 알맞은_데이터];

다른 메소드들은 여러 추가적인 사항들을 데이터에 추가할 수 있도록 한다:

  • actionName: 클라이언트가 요청했을 때 어떤 처리를 할것인지에 대한 설명을 담는 문자열이다. 이 이름은 클라이언트 프로그램의 메뉴에 나타나는 이름을 결정한다. 두가지의 기본 처리이름이 있다:
    • LinkBackEditActionName은 일반적인 수정요청을 처리하는 행동의 이름이다. 데이터를 받아 그 데이터를 표시하면서 수정할 수 있게 하는 처리방법을 일컫는다.
    • LinkBackRefreshActionName은 자동으로 데이터를 업데이트 해주는 행동을 일컫는다.
    • 자신만의 고유한 이름을 만들어도 좋지만, 위의 두 기본 처리이름은 localized된다.
  • suggestedRefreshRate: 자동으로 데이터를 업데이트 해주는 경우, 어떤 시간간격을 두고 업데이트하는 것이 권장되는가를 담는다. 이것은 당연히 수정이 아닌 업데이트가 되는 데이터일 경우 필요한 내용이며, 클라이언트 프로그램은 이 값을 무시할 수 도 있다. 만약에 이 값을 클라이언트 프로그램에서 무시하지 않는다면 여기에 정의된 시간에 따라 자동으로 업데이트가 수행된다. 만약에 자동으로 업데이트되는 것을 지원하지 않는다면 값을 0으로 넣으면 된다.

[편집] LinkBack 수정요청 처리하기

  클라이언트 프로그램에서 수정요청을 보내면 delegate는 linkBackClientDidRequestEdit: 메세지를 받으며, 이때 LinkBack 클래스의 오브젝트가 넘어온다. 이것은 클라이언트와 서버간의 단일 연결을 뜻하며 하나의 수정 요청에 대해 하나의 LinkBack 인스턴스가 클라이언트와 서버에 각각 만들어진다. 이 두가지 인스턴스는 서로에게 연결되어있으며 정보를 주고받는다. 이 연결은 아무때나 끊어질 수 있으며, 만약에 끊어지면 클라이언트 프로그램에서 다시 요청을 보내지 않는이상 다시 연결되지 않는다.

[편집] 수정을 위해 받은 데이터 열기

  NSDocument-based 프로그램같은 경우, 가장 쉬운 방법은 빈페이지로 열리는 거나 기존의 파일을 받아서 열리는 것 이외에도 링크백데이터를 이용하여 열리도록 프로그램의 NSDocument subclass를 수정하는 것이다. 서버 프로그램은 다음과 같은 두가지 일을 수행해야 한다:

  1. LinkBack 오브젝트를 Retain한다. 나중에 수정된 내용을 다시 클라이언트 프로그램에 보낼때 이 오브젝트가 필요하다.
  2. LinkBack 오브젝트로부터 링크백데이터를 수신하고 그 데이터로 프로그램을 연다. 이것은 다음과 같은 방법으로 할 수 있다:
id myAppData = [[aLinkBack pasteboard] propertyListForType: LinkBackPboardType] linkBackAppData];

  이렇게 데이터를 받아 여는 경우에는 평소와는 다른 점이 몇가지 있다. 파일에서 받아 처리하는 것이 아니므로 타이틀바에 아이콘이 표시되어서는 안되고, 윈도우 이름은 대략 다음과 같아야 한다:

Graphics from My File (Nisus Writer Express)

  우선, ‘Graphics’ 부분은 어떤 데이터를 처리하느냐에 따라 맞게 이름을 만들어야 할 거이며, ‘My File’부분은 LinkBack 오브젝트의 -sourceName 메소드를 이용하여 어떤 파일의 내용을 처리하는지 알아낼 수 있다. 마지막으로 클라이언트 프로그램 이름(위의 예에선 ‘Nisus Writer Express’)은 LinkBack 오브젝트의 -sourceApplicationName 메소드로 알아낼 수 있다.


[편집] 데이터를 단지 업데이트만 하는 경우

  만약에 업데이트만 하는 경우, 간단하고 빠르게 업데이트가 수행 가능한 경우 특별한 창을 띄울 필요가 없을 것이다. 위에서 설명한 것과 같은 방법으로 데이터를 받은 후에 업데이트된 내용을 바로 보내기만 하면 된다. 만약에 이 업데이트과정에 오랜 시간이 걸릴것이라고 예상되면, progress bar를 담은 패널을 하나 띄우는 것이 적합할 것이다. 이 패널에는 취소버튼이 있어서 사용자가 언제든 원하면 취소가 가능하도록 만들어야 한다. 이 취소버튼은 LinkBack 오브젝트의 -closeLink 메소드를 불러주면 된다.

[편집] 클라이언트 프로그램에 수정된 데이터 보내기

  위의 과정을 통해서 수정/업데이트가 다 끝난 후에 클라이언트 프로그램에 다시 데이터를 보내야 한다. 업데이트를 수행하는 경우, 다시 보낼 데이터과 준비되자마자 보내야 하며, 수정을 하는 경우에는 사용자가 저장할 때에 데이터를 보내야 한다. 다음과 같은 방법으로 데이터를 클라이언트 프로그램에 다시 보낼 수 있다:

  1. 새로운 데이터를 이용해 링크백데이터를 만든다.
  2. 보통 복사할 때 저장되는 모든 내용을 담아서 LinkBack 오브젝트가 제공하는 특별한 pasteboard에 집어넣는다. 이 특별한 pasteboard 오브젝트는 -pasteboard 메소드로 만들 수 있다. 참고로 이 pasteboard는 다른 복사/붙여넣기에 쓰이는 pasteboard와 별개이므로 다른 작업을 방해하지 않는다.
  3. 클라이언트 프로그램에 새로운 데이터가 준비되었다는 알림을 보내기 위해 -sendEdit 메소드를 부른다.

  수정하는 중이었다면 사용자가 다시 저장할 수 있으므로 연결을 끊으면 안되지만, 업데이트하는 경우에는 일회성이므로 -closeLink 메세지를 보내서 연결을 끊는다.

[편집] 연결이 끊어질 때를 대비하기

  여러 이유에 의해서 작업이 완료되기 전에 링크가 끊어질 수 있다. 예를 들어 클라이언트 프로그램이 종료되거나 수정하던 문서가 닫혀질 때 이런 일이 발생할 수 있다. 이럴 때를 대비하여 알맞은 코드를 집어넣어야 한다. 만약에 수정중이었다면 해당 윈도우도 닫아주어야 한다.

[편집] Client Application을 만들기 위한 작업

[편집] 정해야 할 사항들

클라이언트 프로그램도 서버 프로그램과 마찬가지로 두가지 사항을 미리 결정해야 한다.

[편집] 저장 포맷 결정하기

데이터를 저장할 때, 다른 데이터와 함께 링크백데이터도 저장되어야 한다. 이렇게 저장할 때에 두가지 유념할 사항들이있다:

  1. 링크백데이터는 코코아의 메소드들을 이용하여 archiving 될 수 있는 NSDictionary 오브젝트이다. 모든 오브젝트는 dictionaries, arrays, strings, numbers 그리고 NSData 인스턴스이다.
  2. 서버 프로그램이 어떤 버젼의 링크백을 쓰냐에 따라서 데이터가 달라질 수 있으므로 특정한 key/value pair를 이용하도록 설계하면 안된다.

[편집] 유저인터페이스 디자인

  링크백이 지원되는 데이터가 있다면, 그것을 다르게 표현할 수 있는 방법이 필요하다. 또 그것을 수정할 수 있게 하는 인터페이스도 필요하다. 이런 디자인을 할 때에 다음의 사항을 유념해야 한다:

  1. 링크백 배포 패키지에는 ‘링크백 뱃지(badge)’가 포함되어 있다. 그림의 오른쪽 밑에 이 뱃지를 붙이므로써 이것이 링크백으로 수정될 수 있음을 알려줄 수 있다. 프린트/쇼 등의 완성본 작업을 할 때는 이 뱃지가 보여지면 안되고, 수정을 할 때에만 이 뱃지가 보여져야 한다.
  2. 모든 링크백 클라이언트 프로그램은 링크백 수정 메뉴가 있어야 한다. 이 메뉴는 ‘Edit’ 메뉴의 ‘Find’, ‘Spelling’, ‘Speech’메뉴 아래에 있어야 한며 위의 메뉴들과 링크백 수정 메뉴 사이에 분리선이 있어야 한다. 링크백에는 두개의 helper 함수와 하나의 메소드가 있어서 알아서 메뉴 이름을 만들어준다. 메뉴가 활성화 될 때마다 매번 메뉴 이름이 바뀌도록 해야한다. 뒤에 나오는 ‘수정 요청관련 유저 인터페이스 수정하기’에 메뉴 이름이 바뀌는 것에 대한 자세한 내용이 나온다. 만약에 프로그램에서 원래 더블클릭을 다른 용도로 사용하지 않는다면, 링크백 데이터는 더블클릭으로 링크백 수정이 되도록 하는 것도 권장된다. 이런 방법을 이용하면 사용자가 쉽고 직관적으로 링크백 수정을 시작할 수 있게 되기 때문이다.

Image:linkback_hjn_img8.png

(그림 8) 링크백 수정 메뉴 아이템

[편집] 코딩

서버 프로그램으로 만들어지기 위해서는 다음과 같은 조건을 만족해야 한다:

  1. 링크백 데이터가 문서에 다른 데이터와 함께 같이 저장되도록 한다.
  2. Pasteboard에서 데이터를 읽어들이는 부분에 링크백데이터도 읽도록 한다.
  3. 수정 요청을 시작할 수 있도록 유저 인터페이스를 만든다.
  4. 서버 프로그램에서 전달된 업데이트 된 데이터를 받을 수 있어야 한다.
  5. 링크백 연결이 끊어질 때에 알맞은 조치를 취할 수 있어야 한다.
  6. 링크백 데이터를 파일로부터 읽고, 파일로 쓸 수 있게 한다.

[편집] 문서에 링크백데이터 저장하기

  전체 링크백데이터가 다른 내용과 함께 저장되어야 한다. 이 링크백데이터는 pasteboard에서 가져온 전체 데이터 오브젝트이며 같이 pasteboard에서 읽어진 내용물과 연결되어있어야 한다.

[편집] Pasteboard에서 데이터 읽어오기

Pasteboard에서 데이터를 읽어오는 모든 부분에서 다음과 같은 과정을 거치도록 해야한다:

  • 우선 기본적인 pasteboard 작동이 이뤄져야 한다. ‘이해하는’ 모든 종류의 파일을 제대로 읽어들여서 붙여넣기 할 수 있어야 한다.
  • LinkBackPboardType이 있나 찾아본다.
  • 만약에 존재한다면 다음과 비슷한 코드를 이용하여 링크백데이터를 가져온다:
id linkBackData = [pboard propertyListForType: LinkBackPboardType];
  • 위에서 가져온 링크백데이터를 첫 과정에서 가져온 일반적인 데이터와 함께 저장한다.

[편집] 수정 요청관련 유저 인터페이스 수정하기

  링크백 수정이 가능한 내용물중 어떤 내용물을 선택하느냐에 따라 링크백 수정 메뉴의 타이틀이 바뀌어야한다. 이 메뉴의 타이틀을 결정하기 위해서 링크백에는 몇가지 도움이 되는 메소드와 함수들이 있다. 상황에 따라서 다음 함수들을 호출하면 적절한 메뉴 타이틀을 만들 수 있다:

선택된 내용물 수메뉴 활성화 상태메뉴 타이틀 생성에 쓰일 메소드/함수
0비활성LinkBackEditNoneMenuTitle()
1활성[linkBackData linkBackEditMenuTitle]
>1활성LinkBackEditMultipleMenuTitle()

링크백 수정 메뉴를 사용자가 클릭하면 다음의 메소드를 이용하여 수정을 시작하여야 한다:

LinkBack* link = [LinkBack editLinkBackData: 해당_데이터 sourceName: 출처_이름 delegate: 델레게이트_오브젝트 itemKey: 고유한_키값];
  • 해당_데이터는 수정하게 될 데이터이다.
  • 출처_이름은 수정하고 있는 파일의 이름이다. 즉, TextEdit프로그램이 ‘제목없음1’을 수정하던 도중 링크백 수정이 가능한 데이터를 수정 요청했다면 출처_이름에 들어갈 값은 ‘제목없음1’이다. 이것을 전송하는 이유는 서버 프로그램 타이틀에 원본 파일 이름이 들어갈 수 있도록 하기 위함이다.
  • 델레게이트_오브젝트는 업데이트 된 자료가 넘어오거나 연결이 끊어질 때 불려질 델레게이트 오브젝트이다. 일반적으로 이것은 LinkBack 오브젝트를 관리하는 오브젝트이다. 이 오브젝트는 LinkBackClientDelegate 프로토콜을 따라야 한다.
  • 고유한_키값은 수정하고 있는 데이터를 고유하게 인식하기 위해서 다른 데이터와 중복되지 않게 할당하는 키값이다. 이 키는 어떤 것이던 상관이 없지만, 다른 데이터와 키값이 중복되지 않도록 주의하여야 한다. 링크백의 LinkBackUniqueItemKey() 함수를 사용하여 자동으로 키값을 만들어 사용할 수도 있다.

  위 메소드는 LinkBack 오브젝트를 반환하는데, 이것은 위에서 서버 프로그램에서와 같이 서버 프로그램과의 단일 연결을 뜻한다. 후에 연결을 끊을 때에 필요하므로 이 오브젝트를 잘 보관해 두어야 한다.

[편집] 서버 프로그램에서 새로운 데이터를 전송할 때 대처하기

  서버 프로그램에서 수정/업데이트 된 데이터가 보내지게 되면 -linkBackServerDidSendEdit: 메세지로 위에서 설정한 델레게이트 오브젝트에게 알림이 온다. 이 메소드는 기본적으로 두가지를 수행해야 한다:

  1. LinkBack pasteboard에서 모든 데이터(기본적인 내용물과 링크백데이터)를 읽어온다(LinkBack의 -pasteboard메소드를 이용하라).
  2. 원본 데이터가 있던 자리에 새로운 데이터를 집어넣는다.

  이 과정은 ‘붙여 넣기 과정’과 매우 흡사하다. 그러므로 위에서 썼던 코드를 가져와 변형하여 쓰는 것이 현명할 것이다. 물론 위 과정을 이행하고 보이는 부분도 업데이트 해야한다. 보이는 내용물이 업데이트 되어야 사용자가 링크백 수정이 성공적으로 이뤄졌다는 것을 알 수 있다. 추가로 수정이 완료되면 문서가 ‘dirty’(아직 저장되지 않았다는 의미)하다고 표시해야 한다.

[편집] 서버 프로그램과의 연결 끊김 처리하기

  상황에 따라 서버 프로그램과의 연결이 끊어질 수 있다. 예를 들어 사용자가 수정을 하지 않으려고 서버 프로그램을 닫아버렸다거나, 업데이트가 끝났거나, 서버 프로그램이 다운되었을 때 같은 경우 이런 일이 일어날 수 있다. 이런일이 발생하게 되면 LinkBack 오브젝트의 델레게이트 오브젝트는 -linkBackDidClose: 메세지를 받게 된다. 이 메세지를 받으면 유지되고 있는 LinkBack 오브젝트들을 릴리스하고 관련된 모든 자원들을 릴리스해야 한다.

  사용자가 이 프로그램을 종료하거나 이 문서를 닫아서 서버 프로그램과의 연결을 끊어야 한다면 모든 관련 LinkBack 오브젝트에 -closeLink 메세지를 보내서 관련된 모든 작업을 끝낼 수 있도록 해야한다.

[편집] 링크백데이터를 파일에 저장하고 열기

  마지막으로 저장하는 파일에 기존의 데이터 뿐 아니라 링크백데이터도 포함시키도록 만들어야 하며, 후에 파일을 열 때도 링크백데이터를 찾아서 지원하도록 만들어야 한다.

[편집] Client Application이면서 동시에 Server Application이도록 만들기

  프로그램이 링크백 클라이언트이면서 동시에 링크백 서버이기 위해서는 위에서 말한 두가지 작업을 모두 해줘야 한다. 위에서 언급한 사항 이외에 다음 두가지만 유념해 두면 된다:

  1. 자기 자신에게서 복사한 데이터를 자기 자신에게 붙여넣기 할 때엔 링크백데이터가 포함되지 않기를 원하는 것이 일반적이다. 이 경우 -linkBackDataBelongsToActiveApplication 메소드를 이용하여 자기 자신의 링크백데이터인지 확인할 수 있다.
  2. 다른 프로그램으로부터 가져온 링크백 수정 가능한 데이터를 자신의 프로그램에서 복사하여 다시 또 다른 링크백을 지원하는 프로그램에 붙여넣기 한 후에도 수정 요청을 보내면 제일 처음 프로그램이 잘 실행되는지 꼭 확인해보아야 한다.