UIImageWriteToSavedPhotosAlbum – Error : ‘Data Unavailable’

iPhone Simulator 의 오동작이 발견되어, 기억용으로 포스팅합니다.

 

다음은 이미지객체를 아이폰의 사진첩으로 저장하는 Method입니다.

UIImageWriteToSavedPhotosAlbum([imageThumbView image], self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

 

상단 @selector에서 에러를 처리하도록 정의되어있습니다만,

-(void)image:(UIImage*)image didFinishSavingWithError:(NSError*)localError contextInfo:(void*)contextInfo{

if(!localError){

NSLog(@"Image Written to Photo Album");

baseAlert = [[[UIAlertView alloc ] initWithTitle:nil message:@"이미지 저장중입니다" delegate:self cancelButtonTitle:nil otherButtonTitles:nil] autorelease];

[baseAlert show]; [self performSelector:@selector(performDismiss) withObject:nil afterDelay:0.5f];

}else{

NSLog(@"Error Writing to Albunm : %@", [localError localizedDescription]);

baseAlert = [[[UIAlertView alloc ] initWithTitle:nil message:[NSString stringWithFormat:@"%@",[localError localizedDescription]] delegate:self cancelButtonTitle:nil otherButtonTitles:nil] autorelease];

[baseAlert show]; [self performSelector:@selector(performDismiss) withObject:nil afterDelay:0.5f];

}

}

 

[localError localizedDescription] <– 이녀석이 가끔 “Data Unavailable” 이라고 에러를 뿜는 일이 있습니다.

해결방법은 간단합니다.

 

이 문제는 개발용 아이폰시뮬레이터에 사진첩에 이미지가 1장도 없을경우에 발생합니다.

사파리에서 웹사이트 접속하신후, 아무 이미지나 하나 저장하시면 해결됩니다.

 

이거때매.. 하루종일 컴파일만 하면서 갸우뚱하던걸 생각하면.. ㅠㅠ

[AIP-dev] 스크랩:UIImageView에 원격이미지 비동기 로드 및 캐쉬 기능 넣기

출처 : http://cafe.naver.com/mcbugi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=95095

http://blog.naver.com/jiyh78?Redirect=Log&logNo=40117592091

http://cafe.naver.com/mcbugi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=71846&

아이폰 개발시작한지 3~4개월 되어가면서 조금 감각을 익히기 시작했습니다. 

어플도 그동안 3개 만들어 올려보고요.  
물론 사운드, 그래픽을 고급스럽게 다뤄보지는 못했지만 기본 UI기반으로 개발할때도 워낙 이슈가 많다보니 학습과 개발을 병행하는게 정말 쉽지 않더군요…. 
각설하고요 ㅎㅎ
여기에 소개할 것은 UIImageView에 원격 이미지를 비동기로 로드할 수 있도록 하는 기능과 이미지 캐쉬 기능을 추가한 소스를 공개하려고 합니다.(소스 분석은 주석을 참고 ^^)
아이폰 어플 개발하면 UIImageView를 매우 많이 사용할 겁니다.  번들이미지의 경우야 어짜피 문제 없지만 원격이미지를 로드할때는  몇가지 이슈가 발생합니다.
1. 원격이미지를 매번 로드하는 것은 네트워크 부하를 일으키며 특히나 3G사용자들에게 치명적이 될 수 있다.
2. 테이블에 원격이미지를 붙이는 경우에 동기적으로 이미지 로드하는 경우 멈춤 현상을 일으킬 수 있다. 
3. 비동기적으로 이미지를 로드하더라도 한번에 로드할 수 있는 이미지를 제어하지 않으면 어플의 전체적인 퍼포먼스가 죽는다.
4. TableView에서 TableViewCell는 캐쉬처리되어 재사용된다. 그러므로 거기에 붙은 UIImageView도 재사용하게 되는데 스크롤을 빨리 넘기는 경우 기존에 로드 요청한 이미지가 하나의 UIImageView에 계속 적재되는 현상이 발생할 수 있다.
위 이슈에서 1, 2는 금방 이해갈 갈겁니다. 3번의 경우 1,2번의 처리가 잘되었다고 해도, 한 화면에 5개 이상의 이미지를 비동기적으로 로드한다는 것은 스레드를 5개 이상 생성해서 처리한다는 의미와 같습니다. 어플 하나에 스레드를 너무 돌리면 별로 좋지 못하기 때문에 동시에 로드할 수 있는 이미지를 제어해주어야 합니다. 1~2개 정도로요. 
4번 이슈의 경우 예전에 문씨님이 올려주신 [문씨의 강좌]멀티스레딩2<NSOperation>에 올린 글에 소개된 소스의 경우에 발생합니다. 저는 여기에 이미지 캐쉬기능만 넣어서 실제로 썼습니다. 하지만 TableView에서 문제가 발생했습니다. 분명 NSOperation을 이용한 이미지 로드는 2,3 문제를 해결해줍니다. 하지만 TableViewCell을 재사용되기 때문에 빠른 스크롤을 하는 경우 거기에 붙은 UIImageView 하나에  지속적으로 다른 이미지가 붙도록 요청이 되어 이미지가 광고롤링되는 현상마냥 보이는 경우가 발생합니다. 
1,2,3,4 번의 이슈를 모두 해결하고자 간단하게 클래스를 제작했습니다.
사용하는 방법은 너무도 간단합니다. 그저 UIImageView를 붙히고 (IB에서든 코드상이든) #import “UIImageView+AsyncAndCache.h”를  넣습니다. 그 다음 아래 UIImageView 카테고리 4개 함수중 하나를 쓰시면 됩니다.  UIImageView *imageView = [[UIImageView alloc]init]; 하신뒤 [imageView setImageURLString:@”이미지 원격 경로”]; 형태로 쓰시면 됩니다. 
UIImageView를 카테고리로 만들었으므로 기존 UIImageView 기능은 그대로 사용할 수 있겠고요.
UIImageView 카테고리 외에 내부적으로 2개의 클래스가 정의되어 있습니다. 이는 개발자가 직접 제어하지 않고 위 4개 이슈를 해결하기 위해 내부적으로 사용되는 클래스입니다. 소스 분석을 원하신다면 주석을 달아두었으니 참고하시면 되겠습니다.
아래는 header만 올려놓습니다. 구현부는 첨부파일을 참고하세요.

//

//  UIImageView+AsyncAndCache.h

//

//  Created by Yongho Ji on 10. 12. 3..

//  Copyright 2010 Wecon Communications. All rights reserved.

//

#import <UIKit/UIKit.h>

@class AsyncAndCacheImageOperator;

@class AsyncAndCacheImageOperatorManager;

//////////////////////////////////////////////////////////////

//

// UIImageView에 대한 카테고리 

// 이 카테고리는 테이블뷰에 적용된 Cell안에 UIImageView에서 활용하면 좋다.

// UIImageView의 주요 기능은 다음과 같다. 

//

// 1. 이미지 비동기 로드 

//   이미지를 비동기로 로드해서 화면에 이미지가 뜨는데 버벅거림을 없앤다.

// 2. 이미지 캐쉬기능 

//   이미 로드한 이미지는 cache 디렉토리에 캐쉬해서 나중에 반복 요청시 

//   로컬에 저장된 캐쉬 이미지를 로드해서 네트워크 부하를 없애준다.

// 3. 반복적인 이미지 요청에 대한 로드부하 최소화 

//    같은 UIImageView에 중복으로 로드 요청한다면 맨 마지막에 요청한 이미지가 적용되도록 한다.

//    그뿐 아니라 수십번 반복해서 요청하더라도 무조건 이미지 로드 요청하지 않고 되도록이면 

//   마지막 이미지를 로드요청하여 네트워크 부하를 줄여준다. 

// 

// 개선해야할 사항 

//

// 1. 캐쉬기능 강제삭제기능 

// 2. 지정된 시간이 지난 캐쉬 이미지 자동 삭제기능 

// 3. 캐쉬사용여부 결정기능  

// 

//////////////////////////////////////////////////////////////

@interface UIImageView (AsyncAndCache)

//String형태의 이미지 URL로 초기화

-(id)initWithURLString:(NSString*)url;

//NSURL 형태의 이미지 URL로 초기화 

-(id)initWithURL:(NSURL*)url;

//String형태의 이미지 URL로 셋팅 

-(void)setImageURLString:(NSString*)url;

//NSURL 형태의 이미지 URL로 셋팅 

-(void)setImageURL:(NSURL*)url;

//동시에 로드할 이미지 최대수 수 

+(void)setMaxAsyncCount:(NSUInteger)count;

@end

//////////////////////////////////////////////////////////////

//

// 한개의 ImageView에 대한 오퍼레이터이다.

// 비동기적으로 로드하는 것을 지원하며 더불어 캐쉬기능까지 지닌다.

// 개발자가 이 클래스를 직접 사용하지 않는다.

// 이 클래스는 AsyncAndCacheImageOperatorManager 클래스에서 동작/관리한다.

//

//////////////////////////////////////////////////////////////

@interface AsyncAndCacheImageOperator : NSObject

{

NSURL *_url; //로드할 이미지의 URL 정보 

UIImageView *_imageView; //이미지를 적용할 View

BOOL _canceled; //이미지 적용을 막는다. 즉 UIImageView 재사용시 나중에 로드되더라도 이게 YES이면 적용하지 못하도록 해서 사용자들로 하여금 잘못된 이미지가 로드되는 것을 방지 한다.

id _loadCompleteTarget; //이미지 로드가 완료되었을때 호출할 target

SEL _loadCompleteSelector; //이미지 로드를 완료했을때 호출할 selector

}

@property (readonly) UIImageView *imageView;

//초기화 함수 

– (id)initWithURL:(NSURL*)url imageView:(UIImageView*)imageView;

//스레드 적용 함수 

– (void)main;

//이미지 적용 취소

//main 메서드가 실행중일때 스레드자체는 중단시킬 수 없지만 imageView에 로드한 image를 적용하는 것은 방지시킨다.

– (void)cancel;

//이미지 로드 완료후 호출할 target/selector 적용 

– (void)setLoadCompleteWithTarget:(id)target selector:(SEL)selctor;

@end

//////////////////////////////////////////////////////////////

//

// ImageView정보를 담은 여러개의 오퍼레이터(AsyncAndCacheImageOperator클래스 객체)를 관리한다.

// 개발자가 이 클래스를 직접 사용하지 않는다.

// setMaxAsyncCount를 이용해 한번에 로드할 수 있는 이미지 갯수를 설정할 수 있다.

// 중요한 것은 동일한 UIImageView에 대해서 다른 이미지 로드 요청이 있는 경우 

// 맨 마지막에 요청한 이미지가 붙도록 하며, 같은 UIImageView가 이미지 로드 대기중인 경우에는 

// 이전 UIImageView에 대한 Operator를 삭제함으로써 부적절한 로드로 인한 네트워크 부하를 최소화 해준다.

//

//////////////////////////////////////////////////////////////

@interface AsyncAndCacheImageOperatorManager : NSObject

{

@private

NSUInteger _maxAsyncCount; //동시에 비동기적으로 로드할 이미지 갯수 

NSUInteger _currentAscynCount; //현재 비동기적으로 로드하고 있는 이미지 갯수 

NSMutableArray *_standByImageOperators; //대기중인 Image Operator들

NSMutableArray *_loadImageOperators; //로드중인 Image Operator들 

}

//한번에 로드할 수 있는 이미지 갯수(스레드 최대 갯수)

-(void)setMaxAsyncCount:(NSUInteger)count;

//오퍼레이터 추가 

-(void)addImageOperator:(AsyncAndCacheImageOperator*)imageOperator;

@end

제 소스는 많은 테스트는 거치지 못했습니다. 그러므로 여기 개발자 분들께서 필요하시다면 제 소스를 분석하고 수정하면서 개선해주셨으면 합니다.  
—————————-
수정사항 1
역시 소스가 공개되니 많은 분들이 테스트도 해주시고 좋네요. 만약 이미지 경로가 image.php?ggg=465.jpg로 되어 있다면 ?ggg=465.jpg 부분을 제대로 가져오지 못하는 버그가 있더군요. [_url path]로 되어 있는 부분을 [_url absoluteString]으로 하면 괜찮다고 합니다. 수정해서 쓰세요. 
수정사항 2
초기에 이미지가 붙어 있는데 주어진 이미지 경로에 이미지를 못불러오는 경우 image = nil이 되기 때문에 초기 이미지를 지우는 부분으로 이상하시다는 분도 계셨습니다. 이 부분은 아래처럼 처리하세요.

if (_canceled==NO) 
{
// 이 부분 추가
if (image)
_imageView.image = image;
}

if (_loadCompleteTarget!=nil) 
{
[_loadCompleteTarget performSelectorOnMainThread:_loadCompleteSelector withObject:self waitUntilDone:YES];
}

NSStringEncoding 인코딩 상수값에 대한 테이블

출처 : http://limechat.net/rubycocoa/wiki/?NSStringEncoding

NSStringEncoding 인코딩 상수값에 대한 테이블

1 NSASCIIStringEncoding Western (ASCII) US-ASCII
2 NSNEXTSTEPStringEncoding Western (NextStep) X-NEXTSTEP
3 NSJapaneseEUCStringEncoding Japanese (EUC) EUC-JP
4 NSUTF8StringEncoding Unicode (UTF-8) UTF-8
5 NSISOLatin1StringEncoding Western (ISO Latin 1) ISO-8859-1
6 NSSymbolStringEncoding Symbol (Mac OS) X-MAC-SYMBOL
7 NSNonLossyASCIIStringEncoding Non-lossy ASCII
8 NSShiftJISStringEncoding Japanese (Windows, DOS) CP932
9 NSISOLatin2StringEncoding Central European (ISO Latin 2) ISO-8859-2
10 NSUnicodeStringEncoding Unicode (UTF-16) UTF-16
11 NSWindowsCP1251StringEncoding Cyrillic (Windows) WINDOWS-1251
12 NSWindowsCP1252StringEncoding Western (Windows Latin 1) WINDOWS-1252
13 NSWindowsCP1253StringEncoding Greek (Windows) WINDOWS-1253
14 NSWindowsCP1254StringEncoding Turkish (Windows Latin 5) WINDOWS-1254
15 NSWindowsCP1250StringEncoding Central European (Windows Latin 2) WINDOWS-1250
21 NSISO2022JPStringEncoding Japanese (ISO 2022-JP) ISO-2022-JP
30 NSMacOSRomanStringEncoding Western (Mac OS Roman) MACINTOSH
-1677721344 Unicode (UTF-32LE) UTF-32LE
-1744830208 Unicode (UTF-32BE) UTF-32BE
-1811939072 Unicode (UTF-16LE) UTF-16LE
-1879047936 Unicode (UTF-16BE) UTF-16BE
-1946156800 Unicode (UTF-32) UTF-32
-2147480574 Western (EBCDIC Latin 1) IBM037
-2147481079 Traditional Chinese (Big 5-E)
-2147481080 Ukrainian (KOI8-U) KOI8-U
-2147481082 Traditional Chinese (Big 5 HKSCS) Big5-HKSCS
-2147481083 Simplified Chinese (HZ GB 2312) HZ-GB-2312
-2147481084 Western (Mac Mail) X-MAC-ROMAN-LATIN1
-2147481085 Traditional Chinese (Big 5) BIG5
-2147481086 Cyrillic (KOI8-R) KOI8-R
-2147481087 Japanese (Shift JIS) SHIFT_JIS
-2147481280 Korean (EUC) EUC-KR
-2147481295 Traditional Chinese (EUC) EUC-TW
-2147481296 Simplified Chinese (EUC) EUC-CN
-2147481536 Korean (ISO 2022-KR) ISO-2022-KR
-2147482062 Chinese (GB 18030) GB18030
-2147482063 Chinese (GBK) GBK
-2147482072 Japanese (Shift JIS X0213) Shift_JIS
-2147482360 Vietnamese (Windows) WINDOWS-1258
-2147482361 Baltic Rim (Windows) WINDOWS-1257
-2147482362 Arabic (Windows) WINDOWS-1256
-2147482363 Hebrew (Windows) WINDOWS-1255
-2147482589 Traditional Chinese (Windows DOS), CP950
-2147482590 Korean (Windows DOS), CP949
-2147482591 Simplified Chinese (Windows DOS), CP936
-2147482595 Thai (Windows DOS), CP874
-2147482596 Greek (DOS Greek 2) IBM869
-2147482597 Cyrillic (DOS) CP866
-2147482598 Nordic (DOS)
-2147482599 Arabic (DOS) cp864
-2147482600 Canadian French (DOS)
-2147482601 Hebrew (DOS) DOS-862
-2147482602 Icelandic (DOS) CP861
-2147482603 Portuguese (DOS)
-2147482604 Turkish (DOS) CP857
-2147482605 Cyrillic (DOS)
-2147482606 Central European (DOS Latin 2) CP852
-2147482607 Greek (DOS Greek 1)
-2147482608 Western (DOS Latin 1) CP850
-2147482618 Baltic Rim (DOS) CP775
-2147482619 Greek (DOS) CP737
-2147482624 Latin-US (DOS) CP437
-2147483120 Romanian (ISO Latin 10) ISO-8859-16
-2147483121 Western (ISO Latin 9) ISO-8859-15
-2147483122 Celtic (ISO Latin 8) ISO-8859-14
-2147483123 Baltic Rim (ISO Latin 7) ISO-8859-13
-2147483125 Thai (ISO 8859-11) ISO-8859-11
-2147483126 Nordic (ISO Latin 6) ISO-8859-10
-2147483127 Turkish (ISO Latin 5) ISO-8859-9
-2147483128 Hebrew (ISO 8859-8) ISO-8859-8
-2147483129 Greek (ISO 8859-7) ISO-8859-7
-2147483130 Arabic (ISO 8859-6) ISO-8859-6
-2147483131 Cyrillic (ISO 8859-5) ISO-8859-5
-2147483132 Central European (ISO Latin 4) ISO-8859-4
-2147483133 Western (ISO Latin 3) ISO-8859-3
-2147483412 Inuit (Mac OS)
-2147483496 Cyrillic (Mac OS Ukrainian) X-MAC-UKRAINIAN
-2147483508 Farsi (Mac OS) X-MAC-FARSI
-2147483607 Keyboard Symbols (Mac OS)
-2147483608 Gaelic (Mac OS)
-2147483609 Celtic (Mac OS)
-2147483610 Romanian (Mac OS) X-MAC-ROMANIAN
-2147483611 Icelandic (Mac OS) X-MAC-ICELANDIC
-2147483612 Croatian (Mac OS) X-MAC-CROATIAN
-2147483613 Turkish (Mac OS) X-MAC-TURKISH
-2147483614 Dingbats (Mac OS) X-MAC-DINGBATS
-2147483619 Central European (Mac OS) X-MAC-CENTRALEURROMAN
-2147483622 Tibetan (Mac OS) X-MAC-TIBETAN
-2147483623 Simplified Chinese (Mac OS) X-MAC-SIMP-CHINESE
-2147483627 Thai (Mac OS) X-MAC-THAI
-2147483637 Gujarati (Mac OS) X-MAC-GUJARATI
-2147483638 Gurmukhi (Mac OS) X-MAC-GURMUKHI
-2147483639 Devanagari (Mac OS) X-MAC-DEVANAGARI
-2147483641 Cyrillic (Mac OS) X-MAC-CYRILLIC
-2147483642 Greek (Mac OS) X-MAC-GREEK
-2147483643 Hebrew (Mac OS) X-MAC-HEBREW
-2147483644 Arabic (Mac OS) X-MAC-ARABIC
-2147483645 Korean (Mac OS) X-MAC-KOREAN
-2147483646 Traditional Chinese (Mac OS) X-MAC-TRAD-CHINESE
-2147483647 Japanese (Mac OS) X-MAC-JAPANESE
feed-dialog-iphone-1

Dialog Feed : Facebook SDK 2.0 for iOS

이번에 Facebook SDK 2.0 for iOS 가 나오면서 Dialog Feeding방법이 변경되었네요.

OpenGraph등이 적용되고, Session, Token처리가 좀 달라진것 같습니다.

“photos.upload”가 안되서 한참 쳐다봤네요.. ㅠㅠ


Mobile dialog

On an iPhone, the following code makes an equivalent dialog:

The above code generates the following dialog:

Take a webcam snapshot in Flex 2.0

출처 : http://blog.newmovieclip.com/2006/05/26/take-a-webcam-snapshot-in-flex-20-beta-3/

The bitmapdata class is also represent in Flex offcourse but finally I had the time to test a few things. In this little article I want to show you how you can easily capture a snapshot from a webcam in Flex 2.0. Because I want to do some more experiments later on I created an actionscript component that immediately embed the webcam image in a Panel. So we need to extend the Panel class to make our custumized WebcamPanel class. This sound difficult but it really isn’t. Let’s go ahead !
First make a new Flex project by choosing File > new > Flex Project. Give your project the name you like eg WebcamTutorial.

Next we are going to build our custom WebcamPanel component. Make some new “actionscript class” in your project by choosing File > new >actionscript class. As package we choose myComponents and we call our class WebcamPanel. As superclass we choose mx.containers.Panel.
We want to have all the functionality from our parent class so in the constructor of our WebcamPanel class we call the super() method.

As you see in the constructor we also calling another method called insertWebcamVideo(). These method looks like this:

The first thing we do in the insertWebcamVideo method is declaring a variable videoHolder of the UIComponent type. We must do this to avoid getting errors when adding this as a child to our Panel. I tried casting to an UIComponent also but this way seems to be the only working. The next step is to put our camera stream into a Video object by using the attachCamera method. Next we want to make this all visible (= put it in the DisplayList) by using the addChild method. This way we first put our video object in the videoHolder and last but not least we put our videoHolder in the Panel which we are inheriting from. In the example code above we also changed the y value of our videoHolder to make it look a bit better in the Panel.

Ok, now we have following actionscript class:

Next step in our webcam project is to use our actionscript component in a mxml application.

Choose FILE > new > MXML application. Give it eg the name “MainApplication”.

Your MainApplication.mxml looks like this:


You can see we are now using the default adobe namespace defined by mx prefix.
But we also want to use our own namespace where our components are defined. Change the application opening tag so it looks like this:

As you can see we can now reference all our own components in the package myComponents with a prefix “MyComp”.
This is really cool ! So lets implement our component in our application and skin our panel (YEAH, skinning is sooo damn easy in Flex !) Type following code right under your opening tag:
This is the code that places our own WebcamPanel on the screen. You see we use our own MyComp namespace to reference our component. Next we want to place a normal Panel where we are going to place the snapshot later on :
We also place a button instance on the screen by writing following code:

As you can see at then end of last code we call a function takeSnapshot() when a user click on the button. So next we have to do is writing that function that will do the snapshot job. We write this function in actionscript between tags. These tags are placed directly under your application tag. As mxml files are based on the XML standard we have to use a CDATA section wherein we write our actionscript code. So the start situation is like this :
< ![CDATA[ //write code here ]]>
Place following code between your CDATA section:

As you can see in the function takeSnapshot we use the same technics as in the beginning of this article. We start by declaring a Bitmapdata object with width 320px and height 240 px. We put the bitmapdata in a real Bitmap object. Normally we should try now to add this Bitmap as a child to the Panel pnlSnapshot but also here it is not possible to add it directly because of type problems. So we use a snahshotHolder to store our bitmap. That snapshotHolder can easily be added to our pnlSnapshot as a child. After or before (you can choose) we did that we can call the draw() method of the BitmapData class to put the captured data in our bitmapData object (snapshot) and the job is done !

I hope you liked this tutorial and feel free to give some feedback

altitude

[AIP-dev] 현재 위치의 해발고도 알아내기


* 초기 iPhone과 iPod Touch에서 볼수있는 WiFi기반의 위치정보서비스는 이 기능을 지원하지 않습니다.
GPS칩을 가진 디바이스만 제공가능하며, GPS fix를 지원해야 합니다.

// MainView.h

//MainView.m

변수 newLocation에는 고도(해발고도) 정보가 들어있지만, 같은 장소에 대한 위도와 경도정보도 얻을수 있습니다.

screen-capture-2

iOS SDK Release Notes for iOS 4.3 beta 1

important: This is a preliminary document for an API or technology in development. Although this document has been reviewed for technical accuracy, it is not final. Apple is supplying this information to help you plan for the adoption of the technologies and programming interfaces described herein. This information is subject to change, and software implemented according to this document should be tested with final operating system software and final documentation. Newer versions of this document may be provided with future seeds of the API or technology.

Introduction

iOS SDK 4.3 provides support for developing iOS applications and includes the complete set of Xcode tools, compilers, and frameworks for creating applications for iOS and Mac OS X. These tools include the Xcode IDE and the Instruments analysis tool among many others.

With this software you can develop applications that run on iPhone, iPad, or iPod touch running iOS 4.3. You can also test your applications using the included iOS Simulator, which supports iOS 4.3. Installing iOS SDK 4.3 requires a Macintosh computer running Mac OS X 10.6.4 (Snow Leopard) or later.

For more information and additional support resources, visit:

http://developer.apple.com/programs/ios/

Bug Reporting

Please report any bugs not mentioned in the “Notes and Known Issues” section using the Apple Bug Reporter on the Apple Developer website at: http://developer.apple.com/bugreporter/. Additionally, you may discuss these issues and iOS SDK 4.3 in the Apple Developer Forums: http://devforums.apple.com.

Notes and Known Issues

The following issues relate to using the 4.3 SDK to develop code.

AppleTV

  • AirPlay Video requires the AppleTV Software Beta.
  • AirPlay Video support is now available as an option for developers in the MPMoviePlayerController class. It is also available to web authors via the QuickTime Plug-In or media element. Supported formats include:
    • H.264 video with AAC audio
    • HTTP streaming, both live and on demand
    • progressive download content
    • local content
  • For web-based content, AirPlay Video can be enabled in the QuickTime Plug-in or media element as described below:
    • QTPlug-in attribute:
      • airplay=”allow”
      • airplay=”deny” (Default)
    • For example: <embed src=”movie.mov” width=320 height=240 airplay=”allow”>
    • Media element:
      • x-webkit-airplay=allow
      • x-webkit-airplay=deny (Default)
    • For example: <video controls width=640 height=368 x-webkit-airplay=allow src=content/side_with_the_seeds.mov> </video>

Core Audio

  • NEW: When using the AudioQueueRef type or AVAudioRecorder class to record at a sample rate that is different from the hardware sample rate, the resulting recording is corrupt.

GameKit

  • FIXED: GameKit now reports an error when an achievement or leaderboard score is not actually submitted.

Xcode

  • NEW: Application symbols are not being symbolicated correctly in the Xcode organizer’s device logs.
AdobeMaxK1-3D-immersive

Flash Low-Level 3D API : Molehill 에 대해..

작년 Adobe MAX 2010에서 선보였던 Flash기반 3D API, Codename ‘Molehill’ 에 대해 포스팅 하려고 합니다.
참고사이트 : http://labs.adobe.com/technologies/flash/molehill/

Flash Player 10.2 까지 플래시플랫폼에서 지원하는 3D기능들은 전부 Software Rendering방식으로 구현됩니다. 이는 CPU에 치중된 방식이기 때문에, CPU점유율이 많이 올라가며 좋지않은 퍼포먼스를 보입니다. 그렇기에 Molehill에서 강조했던 가장 큰 기능인 CPU가 아닌 GPU Hardware Accelating 은 차원이 다른 퍼포먼스를 보여줄수 있다는 강점이 있습니다.

주요 특징으로는,
1. z-buffering
2. stencil color buffer
3. vertex shader

이들은 Flash Platform최초로 GPU를 이용한 3D구현하는 공식API라는 점에서 의미가 있습니다.
Windows에서는 DirectX기반으로,  Mac,Linux에서는 OpenGL 1.3, 모바일에서는 OpenGL ES기반으로 작동된답니다. 이도저도 아닌 플랫폼에서는 기존처럼 소프트웨어렌더방식이구요.

아래에는 이를 활용하여 제작된 3D게임들 영상입니다. 퍼포먼스를 확인해보세요~ 깜짝 놀랍니다 ㅋ

MAX Racer – 3D Flash Game with P2P Multiplayer from Tom Krcha on Vimeo.

[하단의 이미지와 링크들은 지돌스타님 블로그에서 발췌했답니다]

Adobe Labs – 3D APIs for Adobe Flash Player and Adobe AIR
Adobe MAX 2010에서 소개된 차세대 GPU 가속 Flash API – Molehill
Molehill Flash Player 3D APIs 소개
Flash Player 3D APIs 간단한 소개글 – 잼있음
[동영상][at MAX 2010] GPU Acceleration on Adobe AIR “Molehill” – 우야꼬 군이 직접 미국에 MAX 행사에가서 찍은 영상입니다.
[동영상][at MAX 2010] Alternativa 3D in Adobe MAX 2010 – 우야꼬 군이 직접 미국에서 Molehill을 체험했군요.
[동영상] Adobe MAX 2010 – Alternativa 3D 시연 – 땡굴이 님께서 Alternativa의 시연모습을 동영상으로 담았습니다.
Molehill Programming Tutorial
ActionScript의 언어 순위는 몇 위일까?

WiFiDirect (1)

Wi-Fi Direct 등장! Bluetooth의 대응은?

이번 CES2011에서 Wi-Fi Direct라는 기술이 주목받고 있습니다.

WiFi Direct는 WiFi Alliance가 개발한 기술로 기존의 Wi-Fi 기술을 활용해 이통망이나 AP없이도 단말기간 빠르고 안전하며 끊김없는 접속을 지원합니다. 이는 기존의 Bluetooth기술을 대체할 가능성이 높으며 실제로 보다 응용할수 있는 기술이나 기능도 풍부합니다.

Wifi Direct는 표준 WiFi기술을 활용하긴 하지만 네트워크 접속방식은 전혀 다릅니다. 즉 기존의 WiFi네트워크나 라우터,AP등을 경유하지 않고 P2P(Peer to Peer)방식을 활용합니다. 뿐만 아니라 기존의 WiFi단말기에도 적용이 가능하며, Bluetooth에 비해 접속범위,반경이 더 넓을뿐 아니라 데이터전송용량 또한 큽니다.

이러한 WiFi Direct탑재 단말은 디지털카메라, 엔터테인먼트 단말, PC등 다양한 단말간 콘텐츠 동기화가 용이해 진다는 장점이 있습니다. 물론 이러한 기술을 위해서는 보다 강력한 보안기술이 필요할 것입니다.

앞서 소개했던 Zigbee, Bluetooth등의 모든 장점을 포함할수 있을것으로 보여, PAN(Personal Area Network)을 구성하는데도 좋아보입니다. 이제 슬슬 제가 꿈꾸는 디지털라이프가 점점 현실로 다가오는군요. 기기간의 커뮤니케이션! 아~ 기대됩니다 ㅎㅎ

” [http://predicto.tistory.com/63, Predicto님 블로그에서 일부글 발췌했습니다]

Wi-Fi Direct는 탑재된 디바이스는 이전의 Wi-Fi 단말과 자유롭게 통신이 가능합니다. 기존의 Wi-Fi 규격인 802.11 a/g/n을 그대로 사용합니다.

기존의 Wi-Fi 디바이스들은 제조사의 software upgrade만으로 Wi-Fi Direct 기능이 제공 가능합니다. H/W 교체가 필요하지 않습니다.

일부 디바이스들은 Wi-Fi 네트워크와 Wi-Fi Direct 네트워크에 동시에 접속할 수 있습니다. 또한, 이 디바이스를 통해서 Wi-Fi Direct 네트워크에 연결된 다른 디바이스들이 인터넷을 사용할 수 있습니다. 예를 들어, 노트북을 Wi-Fi AP로 만들어서 여러 대의 스마트폰이 노트북을 통해서 인터넷에 접속하도록 할 수 있습니다.

Wi-Fi Alliance 멤버 회사의 제품에서만 Wi-Fi CERTIFIED Wi-Fi Direct 기술이 지원될 것이라고 밝히고 있지만, 애플, 인텔, MS, 시스코, 소니, 삼성 등 저희가 아는 회사들은 대부분 Wi-Fi Alliance 멤버이므로 대부분의 디바이스에서 Wi-Fi Direct 기술이 지원될 것으로 예상됩니다. “

WiFi Direct를 사용하기 위해서는 기존의 WiFi의 경우 펌웨어 업데이트가 필수적이라고 하며, Apple도 Wi-Fi Direct에 합의하고 iPhone, iPod 등에 이 기술을 적용할것이라고 알려지고 있습니다.

앞으로 몇년안에 집안의 모든 이더넷케이블이 사라질거 같습니다. 거실의 이더넷포트에 WiFi AP만 하나 설치해놓고, 다른 모든 기기들은 WiFi를 사용하게 되는 때가 곧 올것입니다. STB, 인터넷전화, 데스크탑, 노트북, 스마트폰, 냉장고, TV등 모든 기기가 WiFi를 사용하는 날이 머지않았습니다.