반응형

스마트폰 BTC 채굴앱

https://get.cryptobrowser.site/34473645

 

Earn coins while browsing the web

Earn bitcoins while watching videos, chatting, or playing online. It has never been so easy to increase your income! Tell your friends about CryptoTab Browser, invite them to join, and earn more together. Grow your network—get more profit!

get.cryptobrowser.site

 

 CocoaPods 설치
sudo gem install cocoapods

 CocoaPods 설정 pod setup

 버전 확인 pod —version

 CocoaPods 제거
sudo gem uninstall cocoapods
sudo gem uninstall cocoapods-core
sudo gem uninstall cocoapods-downloader sudo gem uninstall cocoapods-deintegrate sudo gem uninstall cocoapods-plugins sudo gem uninstall cocoapods-search sudo gem uninstall cocoapods-stats
sudo gem uninstall cocoapods-trunk
sudo gem uninstall cocoapods-try

 설치된 cocoapods 리스트 보기 gem list --local | grep cocoapods

 특정버전 제거
sudo gem uninstall cocoapods -v 0.20.2

 최신안정버전설치
sudo gem install cocoapods

 특정버전설치
sudo gem install cocoapods -v 0.38.0

 최신프리뷰버전설치
gem install cocoapods --pre

 

스마트폰 BTC 채굴앱

https://get.cryptobrowser.site/34473645

 

Earn coins while browsing the web

Earn bitcoins while watching videos, chatting, or playing online. It has never been so easy to increase your income! Tell your friends about CryptoTab Browser, invite them to join, and earn more together. Grow your network—get more profit!

get.cryptobrowser.site

 

2020/12/10 - [iOS/Tips] - Custom UserAgent 설정

2020/12/10 - [iOS/Tips] - CocoaPods 설치 및 제거

2020/12/10 - [iOS/Tips] - Clang diagnostic 경고 무시하기

2020/12/10 - [개발노트] - Bluetooth UUID

2020/12/08 - [개발노트] - 모바일 앱 메모리덤프 이슈 해결방법

2020/12/08 - [프로그래밍/Java Script] - Android, iOS 앱 설치여부 체크 및 스토어 이동

2020/08/21 - [Android/Tips] - aab파일 apk파일로 변환

2020/08/11 - [iOS/Swift] - WKWebView 화면 출력 완료 이벤트

2020/08/06 - [iOS/Tips] - 개발관련 폴더 경로

2020/07/19 - [Android/Tips] - 안드로이드 원격 디버깅 방법

2020/07/18 - [Android/Tips] - Cannot convert string value 'JETPACK_COMPOSE' to an enum value of type 'com.android.builder.model.AndroidGradlePluginProjectFlags$BooleanFlag' (valid case insensitive values: APPLICATION_R_CLASS_CONSTANT_IDS, TEST_R_CLASS_CONSTANT_IDS, TRANSITIVE_R_CLASS)

2020/07/18 - [Android/Tips] - OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

2020/07/17 - [iOS/Tips] - 웹에서 iOS 앱 설치여부 체크

2020/07/14 - [Android/Tips] - 웹에서 안드로이드 앱을 실행 (Custom URL Scheme)

2020/07/11 - [OS/Mac OS X] - SMC(System Management Controller) 재설정

반응형

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

Fat Static Library 빌드 (1/2)  (1) 2020.12.10
Custom UserAgent 설정  (0) 2020.12.10
Clang diagnostic 경고 무시하기  (0) 2020.12.10
WKWebView 화면 출력 완료 이벤트  (0) 2020.08.11
개발관련 폴더 경로  (0) 2020.08.06
블로그 이미지

SKY STORY

,
반응형

https://clang.llvm.org/docs/DiagnosticsReference.html http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html

컴파일 및 배포를 해도 상관은 없지만 Xcode Server에서 경고 메시지가 하나 이상 있다면 실패로 처리된다.
그래서 강제로 경고를 무시하게 할 필요가 있다.

다음과 같이 선언하면 경고를 무시할 수 있다.

#pragma clang diagnostic push
#pragma clang diagnostic ignored "
경고가 발생하는 원인" // your code

#pragma clang diagnostic pop

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations" // your 
code

#pragma clang diagnostic pop

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow-ivar" // your code

#pragma GCC diagnostic pop

ex)
// 
로컬 선언을 사용하지 않으려면 인스턴스 변수를 숨김
#pragma clang diagnostic ignored "-Wshadow-ivar"
#pragma clang diagnostic ignored "-Wmismatched-return-types" #pragma clang diagnostic ignored "-Woverriding-method-mismatch" // 
폐기된 함수 또는 변수를 사용한 경우
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
// Extension 
및 부모 클래스에서 미리 selector를 사용하여 구현을 한 경우 #pragma clang diagnostic ignored "-Wundeclared-selector"

 

반응형

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

Custom UserAgent 설정  (0) 2020.12.10
CocoaPods 설치 및 제거  (0) 2020.12.10
WKWebView 화면 출력 완료 이벤트  (0) 2020.08.11
개발관련 폴더 경로  (0) 2020.08.06
웹에서 iOS 앱 설치여부 체크  (0) 2020.07.17
블로그 이미지

SKY STORY

,

Bluetooth UUID

개발/Note 2020. 12. 10. 13:31
반응형

블루투스의 UUID

  • 범용 고유 번호(Universally Unique IDentifiers) 라고 불리며, 128 비트의 숫자들을 조합한다.
  • 범용적으로 사용할 수 있는 고유의 ID를 사용하기 위해 생성되며, 그렇기 때문에 128 비트의 HEX 조합 unique 하여야 한다.
  • Bluetooth 에서는 device에서 제공하는 service를 검색하여 각 service 마다 UUID 를 부여하는등 많은 부분에서 사용된다.

 

UUID의 구성 요소

[time low] - [time mid] - [time high and version] - [clock seq_hi and reserved] - [clock seq low node]

ex) 000011001-0000-1000-8000-00805F9B34FB

  • time low : 타임 스탬프(시간표시) 의 최하위 32 비트.
  • 블루투스 device 끼리 통신을 하기 위해서 소켓 생성시 UUID 가 필요한데 이는 해당 프로토콜의 의미 한다.
  • 안드로이드 플랫폼의 단말기끼리는 어떤 UUID를 사용하여도 되지만 특정 프로토콜의 device에 접근하 기 위해서는 각각의 프로토콜 UUID 를 사용하여만 한다.

 

 

반응형
블로그 이미지

SKY STORY

,
반응형

메모리 덤프를 해결하는 방법에 대해 간단히 팁을 알려드립니다.

메모리 덤프는 실시간이 아니라 특정 시점에 사용중인 메모리를 덤프 하는 것입니다.

그렇기 때문에 메모리를 사용하고나서 바로 사용한 메모리 공간을 초기화 시켜주면 덤프 시 해당 메모리 내용을 볼 수 없게 됩니다.

하지만 현실은 그렇게 쉽지 않죠.. c/c++로 직접 메모리를 제어할 경우 사용한 메모리 초기화하고 제거하면 되겠지만 언어 자체가 메모리를 알아서 관리해 주다보니 제어하기 쉽지 않죠.

해결 방법은 메모리를 생성하여 해당 메모리 내용을 치환하면 됩니다.

예를들어 메모리 버퍼를 생성하고 "ABC12"라는 내용이 할당하였다고 할때 다음과 같이 특수문자로 치환합니다.

'A'->'{', 'B'->'}', 'C'-'>', '1'->'[', '2'->']'

해당 메모리 사용 후 생성된 버퍼를 '0'으로 모두 채워주면 덤프로 해당 내용이 특수문자로 나오거나 빈값으로 처리 됩니다.

물론 원본 데이터를 사용해야 할 경우 로컬 변수로 버퍼를 생성하고 치환된 데이터를 메모리 카피하여

다시 정해진 룰에 따라 치환하여 원본 데이터를 사용하고 생성된 로컬변수는 다시 '0'으로 채워줍니다.

재밌게도 메모리에 다른값을 할당하지 않고 replace 함수로 치환하게 되면 딥 메모리 카피가 일어나지 않고

해당 메모리 실제 데이터 값만 변경이 이루어져 덤프 이슈를 해결할 수 있습니다.

 

2020/12/08 - [프로그래밍/Java Script] - Android, iOS 앱 설치여부 체크 및 스토어 이동

2020/08/21 - [Android/Tips] - aab파일 apk파일로 변환

2020/08/11 - [iOS/Swift] - WKWebView 화면 출력 완료 이벤트

2020/08/06 - [iOS/Tips] - 개발관련 폴더 경로

2020/07/19 - [Android/Tips] - 안드로이드 원격 디버깅 방법

2020/07/18 - [Android/Tips] - Cannot convert string value 'JETPACK_COMPOSE' to an enum value of type 'com.android.builder.model.AndroidGradlePluginProjectFlags$BooleanFlag' (valid case insensitive values: APPLICATION_R_CLASS_CONSTANT_IDS, TEST_R_CLASS_CONSTANT_IDS, TRANSITIVE_R_CLASS)

2020/07/18 - [Android/Tips] - OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

2020/07/17 - [iOS/Tips] - 웹에서 iOS 앱 설치여부 체크

2020/07/14 - [Android/Tips] - 웹에서 안드로이드 앱을 실행 (Custom URL Scheme)

2020/07/11 - [OS/Mac OS X] - SMC(System Management Controller) 재설정

2020/07/11 - [OS/Mac OS X] - NVRAM(PRAM) 재설정 방법

2020/07/11 - [iOS/Swift] - Dictionary sort

2020/07/11 - [iOS/Swift] - UTC시간, Locale시간 변경

2020/07/11 - [iOS/Swift] - SEED 블록암호 알고리즘 CBC (Cipher Block Chaining) 예제2

반응형

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

특수문자 발음  (0) 2020.12.11
Bluetooth UUID  (0) 2020.12.10
Android, iOS 앱 설치여부 체크 및 스토어 이동  (0) 2020.12.08
SMC(System Management Controller) 재설정  (0) 2020.07.11
NVRAM(PRAM) 재설정 방법  (0) 2020.07.11
블로그 이미지

SKY STORY

,
반응형

스마트폰 BTC 채굴앱
https://get.cryptobrowser.site/34473645

 

Earn coins while browsing the web

Earn bitcoins while watching videos, chatting, or playing online. It has never been so easy to increase your income! Tell your friends about CryptoTab Browser, invite them to join, and earn more together. Grow your network—get more profit!

get.cryptobrowser.site

 

모바일 웹 페이지에서 스마트폰의 특정앱이 설치되어 있을 경우 앱을 실행하고
그렇지 않으면 스토어로 이동 시켜야 하는 경우 다음과 같이 처리하여 해결할 수 있다.

 

Android :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.mytest.mypackageid">
	...
</manifest>

<application>
	....
	<activity
		...
		<intent-filter>
			...
			<data android:host="action" android:scheme="myScheme" />
		</intent-filter>
	</activity>
    ....
</application>
방법 1:
location.href = "Intent://action#Intent;scheme=myscheme;package=com.mytest.mypackageid;end";

방법 2:
location.href = "https://play.google.com/store/apps/details?id=com.mytest.mypackageid";

 

참고 자료 :

https://developer.chrome.com/multidevice/android/intents

 

Android Intents with Chrome - Google Chrome

Chrome Extend the Browser What are Extensions? Get Started Tutorial Overview Manifest Format Manage Events Design User Interface Content Scripts Declare Permissions and Warn Users Give Users Options Developer Guide Reach Peak Performance Protect User Priva

developer.chrome.com

 

iOS :

//
// 방법 1 : Timer 이용한 방법
//
function openAppOrStore() {
	var timeout = setTimeout(function () { 
    	window.location = "https://itunes.apple.com/app/id123456789"; 
	}, 25);
	window.location = "myappscheme://";
	clearTimeout(timeout);
}

//
// 방법 2 : iframe을 이용한 방법
//
function openAppOrStore() {
  var appURL = "yourappname://";
  var appStoreURL = "https://itunes.apple.com/app/yourappname/id1234567890";
  
  // 앱이 설치되어 있는지 확인
  var iframe = document.createElement("iframe");
  iframe.style.display = "none";
  iframe.src = appURL;
  document.body.appendChild(iframe);
  
  setTimeout(function() {
    document.body.removeChild(iframe);
    // 앱이 설치되어 있다면 앱 실행
    window.location.href = appURL;
  }, 2000);
  
  // 앱이 설치되어 있지 않다면 앱스토어 다운로드 페이지로 이동
  setTimeout(function() {
    window.location.href = appStoreURL;
  }, 4000);
}
위 코드에서는 `yourappname://`이라는 URL Scheme을 이용하여 앱이 설치되어 있는지를 확인합니다. 
만약 앱이 설치되어 있다면 해당 URL Scheme을 가진 앱을 실행하게 됩니다. 
반면, 앱이 설치되어 있지 않다면 `https://itunes.apple.com/app/yourappname/id1234567890`와 같은 
링크를 이용하여 앱스토어 다운로드 페이지로 이동시킵니다. 
이 때, `window.location.href`를 변경하여 앱스토어 페이지로 이동합니다.



//
// 방법 3 : 'canOpenURL'메소드를 사용하는 방법
//

만약 위 방법 1의 코드를 사용하면서 iframe을 사용하는 것이 보안 문제로 인해 불가능하다면, 
iOS 9부터는 `canOpenURL` 메소드를 사용하여 URL Scheme이 실행 가능한지 확인할 수 있습니다. 
이를 사용하여 `openAppOrStore()` 함수를 다음과 같이 변경할 수 있습니다.

function openAppOrStore() {
  var appURL = "yourappname://";
  var appStoreURL = "https://itunes.apple.com/app/yourappname/id1234567890";
  
  // 앱이 설치되어 있는지 확인
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
      // 앱이 설치되어 있다면 앱 실행
      window.location.href = appURL;
    }
  };
  xhr.open("GET", appURL, true);
  xhr.send();
  
  // 앱이 설치되어 있지 않다면 앱스토어 다운로드 페이지로 이동
  setTimeout(function() {
    window.location.href = appStoreURL;
  }, 4000);
}
위 코드에서는 XMLHttpRequest를 사용하여 URL Scheme이 실행 가능한지를 확인합니다. 
이 때, `open` 메소드의 `async` 파라미터를 true로 설정하여 비동기 요청을 수행하게 됩니다. 
요청이 완료되면 `readyState`가 4이고, `status`가 200인 경우에는 
앱이 설치되어 있다는 것을 의미하기 때문에 앱을 실행합니다. 
그렇지 않은 경우에는 앱스토어 페이지로 이동합니다.


스마트폰 BTC 채굴앱
https://get.cryptobrowser.site/34473645

 

Earn coins while browsing the web

Earn bitcoins while watching videos, chatting, or playing online. It has never been so easy to increase your income! Tell your friends about CryptoTab Browser, invite them to join, and earn more together. Grow your network—get more profit!

get.cryptobrowser.site


2021.03.16 - [iOS/Tips] - Universal Link (1/4) - 네이티브 환경설정
2021.03.16 - [iOS/Tips] - Universal Link (2/4) - 네이티브 링크 수신
2021.03.16 - [iOS/Tips] - Universal Link (3/4) - 웹서버 환경 설정
2021.03.16 - [iOS/Tips] - Universal Link (4/4) - 웹서버 환경 검증
2020/12/10 - [iOS/Tips] - Fat Static Library 빌드 (2/2)
2020/12/10 - [iOS/Tips] - Fat Static Library 빌드 (1/2)
2020/12/10 - [iOS/Tips] - Custom UserAgent 설정
2020/12/10 - [iOS/Tips] - CocoaPods 설치 및 제거
2020/12/10 - [iOS/Tips] - Clang diagnostic 경고 무시하기
2020/12/10 - [개발노트] - Bluetooth UUID
2020/12/08 - [개발노트] - 모바일 앱 메모리덤프 이슈 해결방법
2020/12/08 - [프로그래밍/Java Script] - Android, iOS 앱 설치여부 체크 및 스토어 이동
2020/08/21 - [Android/Tips] - aab파일 apk파일로 변환
2020/08/11 - [iOS/Swift] - WKWebView 화면 출력 완료 이벤트
2020/08/06 - [iOS/Tips] - 개발관련 폴더 경로
2020/07/19 - [Android/Tips] - 안드로이드 원격 디버깅 방법
2020/07/18 - [Android/Tips] - Cannot convert string value 'JETPACK_COMPOSE' to an enum value of type 'com.android.builder.model.AndroidGradlePluginProjectFlags$BooleanFlag' (valid case insensitive values: APPLICATION_R_CLASS_CONSTANT_IDS, TEST_R_CLASS_CONSTANT_IDS, TRANSITIVE_R_CLASS)
2020/07/18 - [Android/Tips] - OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
2020/07/17 - [iOS/Tips] - 웹에서 iOS 앱 설치여부 체크

반응형

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

Bluetooth UUID  (0) 2020.12.10
모바일 앱 메모리덤프 이슈 해결방법  (0) 2020.12.08
SMC(System Management Controller) 재설정  (0) 2020.07.11
NVRAM(PRAM) 재설정 방법  (0) 2020.07.11
duplicate symbol 에러 해결  (0) 2020.06.16
블로그 이미지

SKY STORY

,
반응형

bundletool 설치 :

brew install bundletool

 

apks파일로 변환 :

bundletool build-apks --bundle=test.aab --output=test.apks --mode=universal

 

bundletool을 직접 다운받은 경우 아래와 같이 변환 :

java -jar "bundletool-all-1.1.0.jar" build-apks --bundle="test.aab" --output="test.apks" --mode=universal

 

apks 확장자를 zip으로 변경 후 압축을 풀면 apk파일을 얻을 수 있다. 

 

참고 :

developer.android.com/studio/command-line/bundletool

 

반응형
블로그 이미지

SKY STORY

,
반응형

WKWebView 웹사이트 출력 완료 시점에 자동화 처리를 해야하는 경우가 종종있다.

이럴경우 다음과 같이 현재 페이지 로딩이 완료됬을 때 이벤트를 받아 처리할 수 있다.

func waitFullyLoaded(_ completionHandler: @escaping () -> Void) {
	webView.evaluateJavaScript("document.readyState === 'complete'") { (result, error) in
     	if let fullyLoaded = result as? Bool {
  			if !fullyLoaded || self.webView.isLoading {//not fully loaded yet
                DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                	self.waitFullyLoaded(completionHandler)
                }
            } else {// fully loaded
            	completionHandler()
        	}
    	}
	}
}
 
func test() {
	waitFullyLoaded { [weak self] in
	    guard let unwrappedSelf = self else { return }
    	unwrappedSelf.webView.evaluateJavaScript("javascript:main.payment();");
	}
}

 

반응형

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

CocoaPods 설치 및 제거  (0) 2020.12.10
Clang diagnostic 경고 무시하기  (0) 2020.12.10
개발관련 폴더 경로  (0) 2020.08.06
웹에서 iOS 앱 설치여부 체크  (0) 2020.07.17
Dictionary sort  (0) 2020.07.11
블로그 이미지

SKY STORY

,
반응형

Derived Data

/Users/[ 사용자 계정 ]/Library/Developer/Xcode/DerivedData

 

Archives

/Users/[ 사용자 계정 ]/Library/Developer/Xcode/Archives

 

Simulator Components

/Library/Developer/CoreSimulator/Profiles/Runtimes

 

Provisioning Profiles:

/Users/[ 사용자 계정 ]/Library/MobileDevice/Provisioning\ Profiles

반응형

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

Clang diagnostic 경고 무시하기  (0) 2020.12.10
WKWebView 화면 출력 완료 이벤트  (0) 2020.08.11
웹에서 iOS 앱 설치여부 체크  (0) 2020.07.17
Dictionary sort  (0) 2020.07.11
UTC시간, Locale시간 변경  (0) 2020.07.11
블로그 이미지

SKY STORY

,