2012년 10월 29일 월요일

EWS Managed API를 이용한 연락처 정보 가져오기

MS Exchange Web Service Managed API

MS Exchange Web Service Managed API를 이용하면 EWS를 쉽게 이용할 수 있다. 아는게 없어 SOAP 정보를 하나 하나 분석해가며 사용했던 기억이 새록 새록..

여기서 API를 다운로드하고 실행하면 Program Files\Microsoft\Exchange\Web Services 폴더에 1.2와 2.0 버전의 API가 설치된다. 2.0 폴더의 Microsoft.Exchange.WebServices.dll 을 프로젝트에 참조하고 시작한다.

// 기본 버전은 Exchange2010_SP2 이다. 
ExchangeService service = new ExchangeService(
    ExchangeVersion.Exchange2007_SP1)
{
    Credentials = new WebCredentials("id", "pwd", "domain"),
    Url = new Uri("http://contoso.com/EWS/exchange.asmx")
};

// 연락처 폴더를 바인딩.
var contacts = Folder.Bind(service, 
    new FolderId(WellKnownFolderName.Contacts));

FindItemsResults findResults = service.FindItems(
    WellKnownFolderName.Contacts, 
    new ItemView(contacts.TotalCount));

foreach (var each in findResults)
{
    if (each is Contact)
    {
        Contact contact = each as Contact;
        // contact 변수를 이용해 연락처 정보를 가져온다.
    }
}


위 코드에서는 연락처 정보를 가져왔지만 (WellKnownFolderName.Contacts), 어떤 폴더를 바인딩 하냐에 따라 메일, 캘린더, 작업 등 다양한 아이템들을 가져올 수 있다. 참고로 WellKnownFolderName 구조체의 정의는 다음과 같다.

namespace Microsoft.Exchange.WebServices.Data
{
    public enum WellKnownFolderName
    {
        Calendar = 0,
        Contacts = 1,
        DeletedItems = 2,
        Drafts = 3,
        Inbox = 4,
        Journal = 5,
        Notes = 6,
        Outbox = 7,
        SentItems = 8,
        Tasks = 9,
        MsgFolderRoot = 10,
        [RequiredServerVersion(ExchangeVersion.Exchange2007_SP1)]
        PublicFoldersRoot = 11,
        Root = 12,
        JunkEmail = 13,
        SearchFolders = 14,
        VoiceMail = 15,
        [RequiredServerVersion(ExchangeVersion.Exchange2010_SP1)]
        RecoverableItemsRoot = 16,
        [RequiredServerVersion(ExchangeVersion.Exchange2010_SP1)]
        RecoverableItemsDeletions = 17,
        [RequiredServerVersion(ExchangeVersion.Exchange2010_SP1)]
        RecoverableItemsVersions = 18,
        [RequiredServerVersion(ExchangeVersion.Exchange2010_SP1)]
        RecoverableItemsPurges = 19,
        [RequiredServerVersion(ExchangeVersion.Exchange2010_SP1)]
        ArchiveRoot = 20,
        [RequiredServerVersion(ExchangeVersion.Exchange2010_SP1)]
        ArchiveMsgFolderRoot = 21,
        [RequiredServerVersion(ExchangeVersion.Exchange2010_SP1)]
        ArchiveDeletedItems = 22,
        [RequiredServerVersion(ExchangeVersion.Exchange2010_SP1)]
        ArchiveRecoverableItemsRoot = 23,
        [RequiredServerVersion(ExchangeVersion.Exchange2010_SP1)]
        ArchiveRecoverableItemsDeletions = 24,
        [RequiredServerVersion(ExchangeVersion.Exchange2010_SP1)]
        ArchiveRecoverableItemsVersions = 25,
        [RequiredServerVersion(ExchangeVersion.Exchange2010_SP1)]
        ArchiveRecoverableItemsPurges = 26,
    }
}


참고

2012년 10월 24일 수요일

[iOS] 통신사 정보 및 국가 코드 가져오기

CoreTelephony 프레임워크의 CTTelephonyNetworkInfo, CTCarrier 클래스를 이용해 기기의 통신사 정보를 가져올 수 있다. 프로젝트에 CoreTelephony.framework 를 등록하고 다음 코드를 추가한다.

#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>

CTTelephonyNetworkInfo *networkInfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [networkInfo subscriberCellularProvider];
    
NSLog(@"Carrier Name : %@", [carrier carrierName]);
NSLog(@"MNC : %@", [carrier mobileNetworkCode]);
NSLog(@"MCC : %@", [carrier mobileCountryCode]);
    
[networkInfo release];

통신사 식별자로 사용되는 MNC (Mobile Network Code)와 국가를 식별하는 MCC (Mobile Country Code)는 각 각 2~3자리의 숫자로 이루어져 있다. 각 코드가 나타내는 국가 및 통신사는 아래 Mobile Network Code 참조에서 확인하면 된다. 참고로 한국의 MCC는 450이고, SKT의 MNC는 11, KT는 08이다.

시뮬레이터에서 실행하면 모두 nil로 표시된다. 디바이스에서 실행하면 다음과 같은 결과를 확인할 수 있다.
Carrier Name : KT
MNC : 08
MCC : 450


참고



2012년 10월 12일 금요일

맥북프로에서 CD, DVD, USB로 부팅하기

부트캠프로 윈도8을 설치하고서 파티션 가지고 장난치다기 하드 전체를 날려 먹었다.
눈물을 머금고 OS X부터 재설치하려 하는데 DVD부팅이 안된다. PC 같으면 Del, F2, F11 중 하나일텐데?..

구글링 해보니 맥에도 비슷한 부팅 관련 기능들이 있었다.
부팅 중에 "C" 키를 누르면 CD, DVD 또는 USB로 부팅이 가능하다.

이 외에 많은 부팅 옵션들이 있으니, 자세한 내용은 다음 링크에서 확인할 수 있다.

Intel 기반 Mac의 시동 키 조합

2012년 10월 9일 화요일

Visual Studio 2012 설치 중 멈춤 현상

부트캠프를 이용해 Windows 8 Pro를 설치한 맥북 프로에 Visual Studio 2012를 설치하면 맥북이 멈춰버리는 현상이 발생한다. 몇 번을 설치해봐도 동일한 증상이 발생한다. 구글링해보니 동일한 증상으로 고생하는 사람들이 있었다.

이유는 잘 모르겠지만, 해결 방법만 대충 정리해둔다. 참고로 맥북 프로는 2010년 17인치 모델이다.

1. 그래픽 카드 드라이버를 최신으로 업데이트 한다.
2. 명령 프롬프트를 관리자 권한으로 실행하여 다음 명령어를 입력한다. (어떤 역할의 명령어인지는 모른다..-_-)

bcdedit /set disabledynamictick yes


이 후 설치는 정상적으로 잘 진행된다. 참고하시길.


2012년 7월 12일 목요일

[iOS] Splash Screen 추가

Splash Screen

iOS 앱이 실행될 때 잠시동안 표시되는 이미지를 Splash Screen이라 한다. iOS 앱에서의 Splash Screen을 구현하려면 뷰를 따로 개발할 필요없이 정해진 이름의 PNG 이미지만 추가해주면 된다. 파일명이 "Default.png", "Default@2x.png"인, 320*480, 640*960 사이즈를 가진 이미지 파일을 프로젝트에 추가하면 자동으로 Splash Screen로 표시된다.

주의할 점은 파일 이름이 대/소문자를 구별한다는 사실이다. "Default.png" 만 제대로 표시된다. 파일 이름이 "default.png" (시작이 소문자라면)일 경우엔 iPhone Simulator에서는 정상적으로 표시되지만 실제 디바이스에서는 표시되지 않는다. (사소한 문제지만 이걸로 몇 시간을 날렸다.)

추가

iPhone 5를 이용한 Splash Screen의 파일이름은 "Default-586h@2x.png" 다.

2012년 7월 10일 화요일

[iOS] InstalledApplicationList Command 요청 결과

InstalledApplicationList 커맨드를 이용하여 기기에 설치된 앱들의 정보를 알 수 있다. 기본 앱은 제외된다.iOS 디바이스의 응답은 다음과 같다.

Device Response

<plist version="1.0">
    <dict>
        <key>CommandUUID</key>
        <string>1a3cbacc-38f0-4dcd-a05f-f5ec7d1b8107</string>
        <key>InstalledApplicationList</key>
        <array>
            <dict>
                <key>BundleSize</key>
                <integer>27353088</integer>
                <key>DynamicSize</key>
                <integer>16384</integer>
                <key>Identifier</key>
                <string>com.google.chrome.ios</string>
                <key>Name</key>
                <string>Chrome</string>
                <key>ShortVersion</key>
                <string>19.1084.60</string>
                <key>Version</key>
                <string>19.0.1084.60</string>
            </dict>
        </array>
        <key>Status</key>
        <string>Acknowledged</string>
        <key>UDID</key>
        <string>[[UDID]]</string>
    </dict>
</plist>

2012년 7월 4일 수요일

[iOS] 매크로를 이용한 펑션 이름, 코드라인, 파일네임 출력


// 파일 명, 코드 라인, 메서드 명
NSLog(@"File Name : %s, Code Line : %d, Method Name : %s", 
    __FILE__, 
    __LINE__, 
    __FUNCTION__)