아오..

형이 휴가나와서 폰을 줬는데 형이 불편하고 짱난다면서 순정으로 밀어라네;;

마침 4.3.3 이 되게 잘나왔다고도 하고 완탈도 나왔다길래 넘어가야지 라고 생각하고
복원을 하는데..

꾸준히 떠 주시는 
This device isn't eligible for the repuested build
이런 이상한 에러;;;

원인은.. 간단하게 말하자면 SHSH 오류...

최신버젼인데 뭔 개솔이냐고?
TinyUmbrella 이쇅 한테 물어봐;;
hosts 파일 수정해놓고 원상 복구 안해놨어..ㅠㅠㅠ

root 계정 외엔 수정이 안되서 몇번을 해메고 결국 고쳐 놓고 복원중.........

아.. 이까지 써놓고 자세한 방법은 안써놨군.. 리퍼로 보고 내용 추가...

(맥에서의 방식입니다. 아이폰 아니구요! 윈도우도 마찬가지로 어딘가에 있을 hosts 파일 수정해 주시면 됩니다.
 v3 등의 백신이 켜져 있을 경우 hosts 파일 수정을 막고 있으니 백신 실시간 감시 종료하고 해주세요.)

1. 터미널 실행
2. root 로그인 (su root)
3. cd /etc
4. vim hosts   -> 뭔가 내용이 쫙 뜰겁니다
5. i   -> 누르면 하단에 Insert 라고 뜹니다.
6  아래로 방향키로 이동..
7. 74.~~~~ gs.apple.com 이라고 된 부분 앞으로 이동
8. 이 열을 삭제하거나 앞에 # 추가
9. esc 키 눌러서 입력모드 나오기.
10. :wq + enter
11. 아이튠즈 끈후 재 복원 시도
12. 성공~ 
 

더이상 자세히는 적기 귀찮음. 

'Mac, iOS' 카테고리의 다른 글

iPhoto 휴지통  (0) 2011.06.04
iPod 음악과 게임을 동시에!  (2) 2011.05.07
시디아 재설치 하기  (0) 2011.05.01
.pkg 로 설치한 프로그램 삭제하기  (0) 2011.02.06
iTeleport 구입!  (0) 2011.01.21
음... MobileSubstration Extension 을 동적라이브러리로 불러도 되는건가..? 뭐 일단 이 문제는 패쓰하고;;

이것 역시 유입경로 보고 하는 포스팅! ㅋ


LibActivator 와 연동하기 위해선 우선
libactivator.h (THEOS 를 사용하기 위해 헤더들을 받았다면 그안에 있다.[<LibActivator/libactivator.h>] 없다면... 구글에 검색하면 아마 나올듯..?)
그리고 libactivator.dylib . 어디서 가져왔는지 기억이 안난다;; 걍 두개다 첨부할께요..ㅠ


뭐.. 별다른 문제 없겠지...?

위 두개를 받아서 프로젝트에 추가한다. 
dylib 파일의 경우엔 Link Binary With Libraries 에 추가해야 되는데 걍 집어넣으면 됬던지 기억은 잘 안난다.
아 몰라 자세한건 알아서해 


libactivator.h 임포트 해주고 

+ (void)load

{

[[LAActivator sharedInstance] registerListener:[self new] forName:@"%%%%%"];

} 

- (void)activator:(LAActivator *)activator receiveEvent:(LAEvent *)event

{

if ( 앱이 활성화 중이라면 ) {


return;

}else{
 

        //callShowWindow();

        [event setHandled:YES]; // To prevent the default OS implementation

    }

}


- (void)activator:(LAActivator *)activator abortEvent:(LAEvent *)event

{

// Dismiss your plugin

    

}
 

를 추가해준다. %%%%%는 알아서 수정해 둘것. 앱이름이나 BundleIdentifier 등으로 해두면 된다. 크게 상관없으니 중복만 안되도록 해줄것. 참고로 나같이 프로그래밍 잘 모르면서 덤비는 사람을 위해 적자면, 따로 load 를 호출안해줘도 된다.
앱 활성화 확인 방법은 걍 간단하게 BOOL 변수 하나 만들어서 사용해도 잘되더라.


그다음 /Library/Activator/Listeners/%%%%%/info.plist 를 만든다. %%%%%는 당연히 알겠지만 위에서 지정한 것과 똑같이 하면 된다. info.plist 에서 String 타입의 Description과 title 키를 만들어 알아서 값 넣어주고 아이콘도 있으면 지정해주면 뜬다. 
 
자. 이제 Activator 에서 보면 내가 지정한대로 뜰것이다.
호출되는지 까지 확인하면 Activator 와 사용할 준비는 끝!
 


제대로 된걸 보려면
http://iphonedevwiki.net/index.php/Libactivator 

'개발개발 > Mac, iOS' 카테고리의 다른 글

THEOS 에서 libactivator 사용하기  (0) 2011.08.11
LibActivator add Event (Not Listners)  (0) 2011.08.08
권한 설정 성공!  (0) 2011.02.24
Xcode - Device Log 보기  (0) 2011.02.23
BundleIdentifier로 앱 정보 구하기  (4) 2011.02.23
2012.12.8 - 시디아 링크 깨진거 발견.. 수정했습니다.

===================

오늘도 유입경로 보고 대답하는(?) 포스팅입니다..ㅋㅋ

먼저 필요프로그램 다운로드 주소..

iFIle(선택) - Cydia 에서 설치, 없을 경우 모바일터미널로 대체 가능.
Mobile Terminal(선택) - 이제 시디아에서 검색할때 나오는거 써도 됨. http://code.google.com/p/mobileterminal
openSSH(선택) - Cydia 에서 설치. 모바일터미널과 거의 같음. 이 글에서 특별히 자세한 설명 안할겁니다.

선택 3가지 중에 한가지는 있어야 합니다.
정말 뭐 같게도, iFile, MobileTerminal, OpenSSH 하나도 없고 Cydia 가 정상 작동 하지 않는다면,


1. 그냥 재설치
[iFile]
시디아.deb 파일을 받아서 아이폰에 iFunbox 등의 프로그램을 이용해서 넣습니다.
iFile 에서 해당 파일을 찾아서 Install!

[MobileTerminal, openSSH]
root 로그인 후 (su root) deb 파일이 있는 경로를 찾아 가서
dpkg -i 파일이름.deb


2. 삭제후 재설치 (혹은 시디아가 사라졌을 경우)
[MobileTerminal, openSSH]
root 로그인 후 (su root)
dpkg -purge cydia
(시디아 언어팩도 지우려면 dpkg -purge cydia-lproj )
완료 후 1. 재설치 와 같은 방법대로 시디아 설치.



'Mac, iOS' 카테고리의 다른 글

iPod 음악과 게임을 동시에!  (2) 2011.05.07
This device isn't eligible for the repuested build  (2) 2011.05.07
.pkg 로 설치한 프로그램 삭제하기  (0) 2011.02.06
iTeleport 구입!  (0) 2011.01.21
맥 내장 php 활성화 하기  (1) 2011.01.08
블로그 유입 경로를 확인하다가
모바일 웹페이지 만들기 검색어로 유입이 된 게 있길래 간단하게 써본다.
(아. 당연히 태그, 자바스크립트 등의 웹페이지를 만들기 위한 기본적인 언어와 필요에 따라서 css, php 언어 등도 알고 있겠지??)

모바일 페이지만들기. 간단하게는 단지 사이즈만 맞춰주면 되지만 인터페이스를 아이폰과 흡사하게 만들어 줄 수도 있다.
iui 란 웹앱용 UI를 사용하면 되는데, 예제 파일이나 사용방법 등은 안에 예시 파일이나 검색으로 찾아보시길..
iui : http://code.google.com/p/iui/

사파리를 받아서 설정에서 개발자 용으로 전환하면 메뉴에 개발자 탭이 생기고 User-Agent (웹에서 사용자의 OS, 브라우저 구분할때 사용할 수 있습니다.) 를 아이폰이나 아이패드로 바꿀 수 있다.
아이폰 용으로 만든 싸이트 자체가 사파리나 크롬 외에서는 제대로 안돌아가니 사파리로 테스트 하고 필요에 따라 User-Agent 를 바꿔 테스트 하면 좋다.

또한 인코딩 문제가 자주 발생하므로 헤더에 인코딩 옵션을 지정해주는 메타태그를 꼭 넣어주자!
<meta http-equiv="content-type" content="text/html; charset=utf-8">  (UTF-8 을 사용할 경우.)

2009 년에 마지막으로 업데이트 됬다고 나오는데 그래서 그런지 iOS 특정 버젼에서는 몇가지 기능들이 조금 깨지는 것도 있는 듯...

능력이 된다면 알아서 css파일 수정해서 사용하도록! ㅎㅎ 



그리고 아마 쉽게 찾을수 있지 싶은데.. 

<link rel='apple-touch-icon' href='./img/icon.png'/>
 -> 홈화면에 추가를 눌렀을 때 나올 아이콘 설정 가능. 
<meta name="apple-mobile-web-app-capable" content="yes">
 -> 홈화면에 추가를 한 후 실행하였을때 주소표시줄, 아래 탭을 없애준다. 
<meta name='viewport' content='width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;'/> 
  -> 아이폰에 맞게 화면 설정. scale 값을 조정함으로써 확대,축소 가 가능하게 할 수도 있음.

모두 헤더에 넣어주면 된다. 이외에도 상태바 색을 지정한다던가(홈화면으로 추가시에 적용) 몇가지 더 있다.

그리고 홈화면에 추가를 통해 실행하였는지 확인은
자바스크립트에서 window.navigator.standalone 값을 확인하면 된다. 


아 가장 기본적인 것 하나를 또 빼먹었군,
PC 인지, 모바일 기기(아이폰, 아이패드 등등) 인지 확인은 php 에서
$_SERVER['HTTP_USER_AGENT'] 값을 확인하면 된다. (물론 자바스크립트를 비롯한 다른 언어에서도 가능하다.)
strrpos 함수를 사용하여 iPod, iPad 등의 문자열이 있는지만 확인해도 충분!

도움이 되었기를 바라며,,,, 
며칠전, XCode4 정식버젼이 맥용 앱스토어 버젼으로 나왔다.
개발자 인증(유료)를 한 사람은 개발자 센터에서 무료로 다운이 가능하고, 그 외 사용자에게는
$5에 배포되고 있다.. 이전에 무료인 것에 비하면 아쉽지만, 개발툴 치고는 싼편!

내 맥에서 인터페이스 빌더오류로 난리 났었기에 그냥 아무 생각없이 바로 구매하였다..

맥용 앱스토어에 가면 볼수 있다. 가격은 위에서 말했듯이 $4.99 (평가 왜저래;;)


다운 완료시 애플리 케이션 폴더에 위와 같이 인스톨 프로그램이 설치되며, 실행할 경우 기본 버젼과 마찬가지로
/Developer 에 설치를 시작한다. XCode3 이 설치되어 있을 경우 기본 버젼은 Developer-old 로 이름 변경 후 설치가 진행된다
상당히 오래 걸렸던듯...


메인화면은 디자인의 변경 외엔 눈에 띄는게 없다! ㅋ



상단 부분이 통합되었다는 느낌이다. 특히 인터페이스 빌더와 info.plist 파일...
전체적인 디자인과 몇몇 메뉴가 이동하다 보니 xcode3에도 적응이 안되던 나에겐 너무나 헷갈린다;;;;



그리고 좀 편해졌다고 느껴진게 뭔가 기존 xcode와 organizer 가 서로 연동.. 되는게 많아 진것 같다
원랜 window메뉴에 숨어있다 보니 organizer 처음에 개발자 등록할때만 쓰고 있는지도 모르는 사람도 있었는데..
이젠 그런일 없으려나..?


잠깐 사용해보면서 불편한 점으로는 코드에서의 에러를 실시간으로 계속 스캐닝 하던데, 그래서 상당히 귀찮아 졌다..
코드 작성중엔 다음줄에 계속 에러로 뜨니 상당히 거슬리고, 변수 선언시에도 계속 오류를 뿜어내고 있으니
뭔가 계속 신경쓰인다;; 그냥 기존처럼 빌드 하면서 에러 체크하는게 더 좋았던 듯;;;(나 같으면 에러 체크 용으로 커맨드+B 사용..ㅋㅋ)

Unit Test 란 뭔가 이상한 것도 추가됬는데 뭔지 모르겠으니 패쓰;;


메이저 업데이트이긴 하나, 내부적으로 크게 바뀐건 없는 듯 하다... 기존 Mobile Substrate Extension 사용법이나,
XCode Code Sign Pass 모두 4버젼에서 사용 가능하다고 한다.(아직 사용은 못해봤다..ㅎㅎ)



아직 제대로 사용은 못해봤지만, 친해지도록 노력 해봐야지;;

'개발개발 > 기타' 카테고리의 다른 글

[Mac / Ubuntu] Go (golang) 설치하기  (0) 2015.12.22
winapi gdi+ image load and convert to HBITMAP  (0) 2015.11.02
Surrounded 스킨 깨짐 해결  (0) 2015.06.07
python to exe  (2) 2015.02.25
[XCode5] 부분적으로 MRC 사용  (0) 2013.12.15
와하하하하핳 성공했다!!!ㅋㅋㅋ
어제+오늘 아침 아이폰으로 열심히 아무리 찾아도 없더니 오늘 다시 한 5분 찾으니 바로 나오네..ㅡㅡ
아 기분 좋긴 한데 살짝 빡..;;ㅋㅋ

permission 이라 암만 검색해도 안나오던데.. filemanager에 떡하니 nil이란 인수를 받고 있는 attributes 가 정답.. 아놔.. 미리 볼껄..ㅠㅠㅠㅠ

내가 검색한 소스는

(아마 디렉토리 퍼미션 변경인듯..... 적당히 수정하자.)
- (void)chmodOpen
{
  NSString *path = @"/hardcoded_path_of_directory";
  NSFileManager *manager = [[[NSFileManager alloc] init] autorelease];
  BOOL isDir;
  if ([manager fileExistsAtPath:path isDirectory:&isDir]&&isDir) {
      NSDictionary *attrib = [NSDictionary dictionaryWithObjectsAndKeys:
              [NSNumber numberWithUnsignedLong:511], NSFilePosixPermissions, nil ];
      NSError *error = nil;
      [manager setAttributes:attrib ofItemAtPath:path error:&error];
  }
	//Basically chmod 777 on directory;
}


이것.
중간에 numberWithUnsignedLong: 값을 수정함으로써 권한 설정을 바꿀 수 있다.
511:777
493:755

확인 방법은 

int perm = 0755;

NSLog(@"%d %o", perm, perm);

NSLog 로 중간중간 콘솔로 상태를 찍어보곤 하는데 시뮬레이터에선 디버거가 뜨지만
나같이 개발자 인증을 정식으로 돈주고 하지 않은 경우 디바이스 테스트를 할 수 없으며
XCode3 Code Sign 작 을 하여도 디버거가 뜨지 않는다... 하지만 방법이 있으니,
XCode를 실행하고 상단 메뉴에서 Organizer 를 실행하고
DEVICE - Console 을 선택한다.

NSLog로 출력되는 것이 Warning 으로 볼 수 있게 된다.

아는 사람에게는 너무나 당연하고 간단한 사실;;;ㅠ

-------------
XCode4 에서는 상단 우측에 있는 Organize 버튼을 누르면 된다. 
앞에 썼던 글의 연결이다...
특정 파일에 설치 정보가 기록되기 때문에 거기서 자료를 가져오는 방식..
더보기 클릭!


저장되는 데이터 키값들 (없는 것도 있고, 여기엔 있는데 실제론 없을 수도 있음.

역시 더보기!


이거 못찾았으면 하나하나 검색방식으로 구현할뻔;;ㅋㅋㅋㅋ

쨋든, 다행~!ㅎㅎ

'개발개발 > Mac, iOS' 카테고리의 다른 글

권한 설정 성공!  (0) 2011.02.24
Xcode - Device Log 보기  (0) 2011.02.23
앱 설치 여부 구하기  (0) 2011.02.22
DEBIAN PACKAGING (deb) 만들기 (수정)  (1) 2011.01.30
PreferenceLoader 사용법  (0) 2011.01.30
12.8 추가

새 방법은 앱스토어에서 사용가능한 방식입니다.
자세한건 새 글에서 소개..

====================

추가, 외국포럼에 보면 운좋게 심사를 통과후, 정상 작동한단 말이 있는것 같긴 하지만
쨋든 심사부터 통과못하는 것같고, 통과하더라도 작동하지 않는 듯...

canOpenURL 을 통해 여부를 확인하는걸 가장 추천하지만 여의치 않을때는....에라 모르겠다..ㅋ

====================

앱의 설치 여부를 알수 있는 소스. Bundle ID를 이용하며,
코딩은 이것저것 배려되어 있지만 상당수 제거해버려도 큰 상관이 없다...
원리는 
/var/mobile/Library/Caches/com.apple.mobile.installation.plist
파일에 모든 데이터가 기록되어 있다는 것을 이용.
사실 이것만 알면 아래 소스는 큰 필요가 없다.

코딩하기 귀찮을때 사용하자..ㅋㅋ

// Declaration
BOOL APCheckIfAppInstalled(NSString *bundleIdentifier); // Bundle identifier (eg. com.apple.mobilesafari) used to track apps

// Implementation

BOOL APCheckIfAppInstalled(NSString *bundleIdentifier)
{
	static NSString *const cacheFileName = @"com.apple.mobile.installation.plist";
	NSString *relativeCachePath = [[@"Library" stringByAppendingPathComponent: @"Caches"] stringByAppendingPathComponent: cacheFileName];
	NSDictionary *cacheDict = nil;
	NSString *path = nil;
	// Loop through all possible paths the cache could be in
	for (short i = 0; 1; i++)
	{
	
		switch (i) {
	case 0: // Jailbroken apps will find the cache here; their home directory is /var/mobile
		path = [NSHomeDirectory() stringByAppendingPathComponent: relativeCachePath];
		break;
	case 1: // App Store apps and Simulator will find the cache here; home (/var/mobile/) is 2 directories above sandbox folder
		path = [[NSHomeDirectory() stringByAppendingPathComponent: @"../.."] stringByAppendingPathComponent: relativeCachePath];
		break;
	case 2: // If the app is anywhere else, default to hardcoded /var/mobile/
		path = [@"/var/mobile" stringByAppendingPathComponent: relativeCachePath];
		break;
	default: // Cache not found (loop not broken)
		return NO;
		break; }
		
		BOOL isDir = NO;
		if ([[NSFileManager defaultManager] fileExistsAtPath: path isDirectory: &isDir] && !isDir) // Ensure that file exists
			cacheDict = [NSDictionary dictionaryWithContentsOfFile: path];
		
		if (cacheDict) // If cache is loaded, then break the loop. If the loop is not "broken," it will return NO later (default: case)
			break;
	}
	
	NSDictionary *system = [cacheDict objectForKey: @"System"]; // First check all system (jailbroken) apps
	if ([system objectForKey: bundleIdentifier]) return YES;
	NSDictionary *user = [cacheDict objectForKey: @"User"]; // Then all the user (App Store /var/mobile/Applications) apps
	if ([user objectForKey: bundleIdentifier]) return YES;
	
	// If nothing returned YES already, we'll return NO now
	return NO;
}
Here is an example of this, assuming that your app is named "yourselfmadeapp" and is an app in the app store. 
Code:
NSArray *bundles2Check = [NSArray arrayWithObjects: @"com.apple.mobilesafari", @"com.yourcompany.yourselfmadeapp", @"com.blahblah.nonexistent", nil];
for (NSString *identifier in bundles2Check)
	if (APCheckIfAppInstalled(identifier))
		NSLog(@"App installed: %@", identifier);
	else
		NSLog(@"App not installed: %@", identifier);


'개발개발 > Mac, iOS' 카테고리의 다른 글

Xcode - Device Log 보기  (0) 2011.02.23
BundleIdentifier로 앱 정보 구하기  (4) 2011.02.23
DEBIAN PACKAGING (deb) 만들기 (수정)  (1) 2011.01.30
PreferenceLoader 사용법  (0) 2011.01.30
MobileSubstrate Extension with XCode  (0) 2011.01.07
사실 이문제 때문에 되게 많이 고민했다.
.app 은 어플만 삭제, 혹은 기껏해야 library 삭제만 하면 됬는데 .pkg는 어디에 설치되는지도 알 수 없을 뿐더러
uninstaller 를 제공하는 프로그램도 많지 않다.. 결국 찾은것은 패키지 프로그램이 설치하는 경로의 앱들을 직접 지우는것;;; 자동화 해주는 프로그램을 찾아봤는데 아직 찾지 못했다.. OTL..
직접 지우다 보니 공유자원도 삭제할수 있는 위험한 방법.. 

이것보다 더 좋거나 안정적인 방법이 있으면 알려주시길..

우선 설치된 파일의 pkg 파일이 필요하다. 알아서 구하자..
마운트된 볼륨안에 있다면 터미널 상에서
cd /Volume/
까지 치고 Tab을 두번 누르면 디스크 리스트가 뜨는데 거기서 해당하는 디스크의 앞 두글자 정도만 치고 다시 탭을 누르면 주소가 완성된다 그러고 이동하자.

그리고 설치한 pkg 파일로 들어간다. pkg도 디렉터리 개념인지 그냥 cd 커맨드로 들어가 진다.
그다음 유일한 폴더인 Contents 폴더로 진입.. 한줄로 줄이자면
cd /Volume/[마운트 디스크 이미지 이름]/패키지이름.pkg/Contents/
혹은
cd 패키지이름.pkg/Contents/

그다음
lsbom -pf Archive.bom | less
라고 입력하면 리스트가 쫙 뜬다. 대부분 특정 폴더안에 다 들어 있으니 찾아가서 삭제하면 된다.
참고로 이 상태에서 Control+F 를 누르면 한페이지씩 넘어가고 q를 누르면 빠져나오게 된다.
/usr 등 파인더로 접근 불가능한 폴더는
파인더에서
Cmd+Shift+G 를 눌러서 경로로 이동 매뉴를 사용하거나
터미널로 해당 폴더가 있는 폴더까지 접근 후(해당 폴더 전부 지울때)
sudo rm -rf 폴더이름
하면 된다. 조금 주의를 가지도록 하자...^^ 문제 생겨도 난 책임안짐 ㅋ

+ Recent posts