음... 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 

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
시디아 재설치 하기  (0) 2011.05.01
.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
XCode4 업데이트  (1) 2011.03.11
  1. BlogIcon iolate 2011.04.30 14:29 신고

    XCode3 과 동시에 사용가능한게 궁금한 분이 많으신 것 같은데 결론은 사용가능 합니다.
    오히려 같이 있어서 간혹 불편할때도 있어요..(연결 프로그램 지정이 잘못되어서;;)

    XCode3 은 폴더명이 Developer-old 로 바뀌지만 하위에 있는것들 다 정상작동 합니다.

와하하하하핳 성공했다!!!ㅋㅋㅋ
어제+오늘 아침 아이폰으로 열심히 아무리 찾아도 없더니 오늘 다시 한 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);

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

LibActivator add Event (Not Listners)  (0) 2011.08.08
substrate Extension 과 LibActivator 연동하기  (0) 2011.05.01
권한 설정 성공!  (0) 2011.02.24
Xcode - Device Log 보기  (0) 2011.02.23
BundleIdentifier로 앱 정보 구하기  (4) 2011.02.23
앱 설치 여부 구하기  (0) 2011.02.22
NSLog 로 중간중간 콘솔로 상태를 찍어보곤 하는데 시뮬레이터에선 디버거가 뜨지만
나같이 개발자 인증을 정식으로 돈주고 하지 않은 경우 디바이스 테스트를 할 수 없으며
XCode3 Code Sign 작 을 하여도 디버거가 뜨지 않는다... 하지만 방법이 있으니,
XCode를 실행하고 상단 메뉴에서 Organizer 를 실행하고
DEVICE - Console 을 선택한다.

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

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

-------------
XCode4 에서는 상단 우측에 있는 Organize 버튼을 누르면 된다. 

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

substrate Extension 과 LibActivator 연동하기  (0) 2011.05.01
권한 설정 성공!  (0) 2011.02.24
Xcode - Device Log 보기  (0) 2011.02.23
BundleIdentifier로 앱 정보 구하기  (4) 2011.02.23
앱 설치 여부 구하기  (0) 2011.02.22
DEBIAN PACKAGING (deb) 만들기 (수정)  (1) 2011.01.30
앞에 썼던 글의 연결이다...
특정 파일에 설치 정보가 기록되기 때문에 거기서 자료를 가져오는 방식..
더보기 클릭!


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

역시 더보기!


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

쨋든, 다행~!ㅎㅎ

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

권한 설정 성공!  (0) 2011.02.24
Xcode - Device Log 보기  (0) 2011.02.23
BundleIdentifier로 앱 정보 구하기  (4) 2011.02.23
앱 설치 여부 구하기  (0) 2011.02.22
DEBIAN PACKAGING (deb) 만들기 (수정)  (1) 2011.01.30
PreferenceLoader 사용법  (0) 2011.01.30
  1. 게북이 2011.08.16 19:58

    좋은 정보 감사합니다.
    jailbreak 안된 아이폰에서도 이런 방식으로 앱 정보를 얻을 수 있나요?
    제 순정 아이폰에서는 안되는 것 같아 문의 드립니다.
    com.apple.mobile.installation.plist 파일을 못 찾는 것 같아서 문의드립니다.

    • BlogIcon iolate 2011.08.16 22:57 신고

      아마 절대 경로가 아니라 상대경로로 (도큐먼트 폴드 경로를 구한후 ../../ 식으로 내려가야 할겁니다) 들어가야 접근이 가능할 것이구요..
      어찌됬든 앱스토어심사시 리젝될 확률이 큽니다.
      간혹 통과됬다는 말이 있는데 그건 리뷰어가 테스트 하지 못하게 숨겨둔 정도..?ㅋㅋㅋ 운이 좋은거죠 뭐

      GetInstalledAppInfo 로 구글에 검색하시면 영문 싸이트들이 있을건데요 그중에 제가 위로 말한 방법처럼 상대경로로 내려가는 오리지널 코드가 있을겁니다.(여긴 제가 수정한 거구요.)

      다른방법은 저도 찾고 있는데 아직 모르겠구요(ㅎㅎ)
      URL 스키마 가 적용된 앱이라면 해당 스키마를 실행할 수 있는지 여부로 앱설치 여부를 판단 할 수 있습니다.

  2. 게북이 2011.08.17 14:20

    답변해주실지를 기대하지 않고 글을 올렸는데 답변 주셔셔 감사합니다.
    현재 기업 내부 배포용(엔터프라이즈 인하우스) 앱을 제작하고 있어 기업내에서 사용하는 용도라 마켓 리젝은 문제가 되지 않아 알려 주신 위와 같은 방법을 사용하려 했습니다. 그리고 앱 설치 여부 보다 사실은 개별의 앱의 버전 정보가 필요했던 것입니다. 그래서 말씀해주신대로 상대경로로 찾아 들어가도 순정폰에서는 Library 폴더에 접근해서 그 폴더에 파일리스트에 Caches 폴더는 보이지만 Caches폴더 권한 설정 변경이나 읽기를 시도하면 파일이 존재하지 않는다고 에러를 리턴하네요. 아무튼 많은 도움이 되었습니다.

    • BlogIcon iolate 2011.08.17 15:58 신고

      NSString *relativeCachePath = [[@"Library" stringByAppendingPathComponent: @"Caches"] stringByAppendingPathComponent: @"com.apple.mobile.installation.plist"];
      path = [[NSHomeDirectory() stringByAppendingPathComponent: @"../.."] stringByAppendingPathComponent: relativeCachePath];

      이렇게 해보신 것 맞나요?

      내용을 대강 보면 순정에서도 가능한것 같은데 말이죠..ㅠㅠ
      http://www.iphonedevsdk.com/forum/iphone-sdk-development/37103-finding-out-what-apps-installed.html
      주소에 원문이 있습니다. 꼭 필요하시다면 한번만 더 시도해보세요~^^

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
앱 설치 여부 구하기  (0) 2011.02.22
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 폴더이름
하면 된다. 조금 주의를 가지도록 하자...^^ 문제 생겨도 난 책임안짐 ㅋ
이글은 패키징을 직접 다 만들어서 하는 방법이다...
THEOS 를 이용해서 컴파일할 경우 makefile 약간 수정해서 걍 바로 한방에 패키징까지 하도록 하자;;;;; - 이거 설명은 나중에 하겠음!

이번 글은 데비안 패키지.
이건 다행이도 외국인의 친절한 유투브 동영상이 있었다..ㅎㅎ
하지만 맥에 dpkg를 설치하는데 좀 헤맨듯..

우선 MacPorts 를 설치해야 한다. 자세히는 모르겠지만
iPhone 의 apt-get 과 비슷한 역활을 하는듯.

다운을 받았으면 터미널을 실행하고

sudo port install dpkg

port 도 좋지만 homebrew 가 더 좋은듯.
이경우엔 sudo brew install dpkg

를 실행한다. 시간이 좀 걸림..(패스워드는 로그인한 계정의 비밀번호)

그다음 폴더를 하나 만들고 (폴더명은 크게 상관 없다.)
하위에 DEBIAN 폴더를 생성하고, 그안에 control 이라는 UTF-8 형식의 확장자 없는 파일을 만든다.(텍스트 편집기로 만들면 됨.)
내용은 아래와 같이...
[saurik 블로그에서 관련된 내용을 발견해서 조금 수정하겠음..ㅋ 원문은 : http://www.saurik.com/id/7 ]

Package: MyProgram
Version: 1.0
Architecture: iphoneos-arm
Depends: mobilesubstrate, preferenceloader
Replaces: MyProgram
Conflicts: MyProgram
Section: System
Maintainer: iolate <iolate@me.com>
Description: Lanch Banking app for jailbroken phone

Package 는 앱스토어앱들의 identifier 개념이다. 대문자로 적어도 모두 소문자로 인식.. 즉 대소문자 구분하지 않는다.
apt-get 등으로 받을때 사용되는 이름이기도 하다. 고로 고유해야 겠지?
 
Name 항목을 생성하고 넣을경우 시디아에선 이 Name 값이 나온다. 단, 사용자 필드이므로 빌드시 옵션을 넣어줘야 한다.
version 은 말그대로 버젼... 숫자,".","-" 까지 허용되는 것 같다..
Architecture 은 무시해도 되고 Depends는 의존성. 의존성에 있는 버젼 or 앱이 없으면 설치되지 않는다. 시디아에서의 경우 시디아가 자동으로 설치해줄것이다..(소스 내에 있으면.)
Replace는 이앱을 대치한다..Conflicts 는 아마 여기에 적힌 앱을 지우고 설치될 것이다..
Section은 음... 앱 만들정도 되면 다알겠지.. 그 밑으로도 알아서 이해하시길..귀찮;;ㅋㅋㅋㅋ


그리고 control 과 같은 경로에 특정 스크립트들을 넣어둘 수가 있다.
postinst 는 설치 후 작업.
preinst 는 설치 전 작업.
prerm 은 삭제 전,
postrm 은 삭제 후 실행되는 스크립트 파일 명이다.

권한 설정 등은 postinst 로 하면 되고 purge, remove, install 등 어떻게 실행 된 건지 체크 할 수도 있다.
이부분은 openssh 를 뜯어보시길..ㅋㅋ

그외에 다른 스크립트도 있는지는 모르겠음.


DS_Store_Cleaner_1.5.0.tar.gz

또한 맥에선 캐쉬 등을 위해 이것저것 잡 파일들을 많이 만든다..
그중 하나가  DS_Store 란 파일.. 위의 첨부파일로 삭제해주도록 하자.
저게 아마 Snow Leopard 에서만 작동할 수도 있는데 그러면 홈페이지 찾아가서 새 버젼 받으면 된다.ㅋ

이 프로그램으로 파일 내의 DS_Store 파일을 제거해 준뒤
터미널을 열어서

패키징을 원하는 폴더의 상위 폴더로 이동해서
dpkg -b 폴더이름
를 해주면 된다. tab키로 자동 완성 시킬 경우 젤 뒤에 / 가 생기는데 이럴경우 어디론가 사라지고 없으므로 꼭 지워주도록 하자.

이렇게 하면 폴더와 같은 위치에 deb파일이 생성된다! iFile등으로 설치하고 리스프링 하면 완료!!!


참고로 로컬에서 DEB를 설치해도 기록이 남기에 시디아에서도 Change에 리스트가 뜬다.


+ dpkg의 결과물에 ._ 로 시작하는 파일이 포함될수 있다. 나의 경우 DS_Store 는 지웠는데 남아있더라. deVbug님의 블로그에 보면 이에 대한 해결책을 알려준다. (http://devbug.me/618)

근데 나한텐 안되더라..ㅠㅠ
나의 경우엔 bash_profile 에

export COPYFILE_DISABLE=true
export COPY_EXTENDED_ATTRIBUTES_DISABLE=true

를 추가해서 해결봤다!

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

BundleIdentifier로 앱 정보 구하기  (4) 2011.02.23
앱 설치 여부 구하기  (0) 2011.02.22
DEBIAN PACKAGING (deb) 만들기 (수정)  (1) 2011.01.30
PreferenceLoader 사용법  (0) 2011.01.30
MobileSubstrate Extension with XCode  (0) 2011.01.07
cydia 앱, MobileSubstrate  (0) 2011.01.07
  1. 와... 2011.12.01 02:20

    님 짱인듯요

    이런 걸 어떻게 아시었지...?

    감사합니다.

+ Recent posts