반응형

UIWebview에서 WKWebview로 변경하면서 js함수 호출시 비동기식으로 호출되는 것을 알 수 있다.

그런데 이전 웹 코드가 동기식으로 해야 동작하는 경우가 생길 수 있다.

이 경우 아래와 같이 동기식으로 호출되도록 처리할 수 있다.

@interface WKWebView(SynchronousEvaluateJavaScript)
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
@end

@implementation WKWebView(SynchronousEvaluateJavaScript)

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
{
    __block NSString *resultString = nil;
    __block BOOL finished = NO;

    [self evaluateJavaScript:script completionHandler:^(id result, NSError *error) {
        if (error == nil) {
            if (result != nil) {
                resultString = [NSString stringWithFormat:@"%@", result];
            }
        } else {
            NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
        }
        finished = YES;
    }];

    while (!finished)
    {
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    }

    return resultString;
}
@end

/*
[ 사용 방법 ]
NSString *msg = @"test message";
NSString *param = [NSString stringWithFormat:@"alert('%@')", msg];
[self.webView stringByEvaluatingJavaScriptFromString:param];
*/

 

2020/12/10 - [iOS/Objective-C] - 웹뷰에서 javascript 함수 동기식 호출

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

반응형

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

bundle id 알아내기  (0) 2020.12.14
UIViewController 스위칭  (0) 2020.12.11
Fat Static Library 빌드 (2/2)  (0) 2020.12.10
Fat Static Library 빌드 (1/2)  (1) 2020.12.10
Custom UserAgent 설정  (0) 2020.12.10
블로그 이미지

SKY STORY

,
반응형

이번에는 Fat Static Library만드는 작업을 스크립트로 처리하여 자동화 처리하는 방법입니다.

 

Fat Static Library(이하 Fat 라이브러리) 빌드 자동화  스크립트 사용 방법

1. Xcode의 Build Phases에서 스크립트 추가

2. 아래 스크립트 내용을 붙여넣기 한다.

##############################################

#

# Fat static library

#

# Automatically create cross-platform (simulator + device) 

# static libraries for Objective C / iPhone / iPad.

#

# added by netcanis 2018.10.26 

#############################################

set -e

set -o pipefail



# Get BaseSdk version

SDK_VERSION=$(echo ${SDK_NAME} | grep -o '\d\{1,2\}\.\d\{1,2\}$')



# Get build type (Device or Simulator).

if [ ${PLATFORM_NAME} = "iphonesimulator" ]

then

OTHER_SDK_TO_BUILD=iphoneos${SDK_VERSION}

else

OTHER_SDK_TO_BUILD=iphonesimulator${SDK_VERSION}

fi



if [ "true" == ${ALREADYINVOKED:-false} ]

then

echo "RECURSION"

exit 0;

fi





# Building

export ALREADYINVOKED="true"



xcodebuild -configuration "${CONFIGURATION}" -project "${PROJECT_NAME}.xcodeproj" -target "${TARGET_NAME}" -sdk "${OTHER_SDK_TO_BUILD}" ${ACTION} RUN_CLANG_STATIC_ANALYZER=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" SYMROOT="${SYMROOT}"



ACTION="build"



CURRENTCONFIG_DEVICE_DIR=${SYMROOT}/${CONFIGURATION}-iphoneos

CURRENTCONFIG_SIMULATOR_DIR=${SYMROOT}/${CONFIGURATION}-iphonesimulator

CREATING_UNIVERSAL_DIR=${SYMROOT}/${CONFIGURATION}-universal



# Remove previous build floder.

rm -rf "${CREATING_UNIVERSAL_DIR}"

mkdir "${CREATING_UNIVERSAL_DIR}"



# Make universal static library.

xcrun -sdk iphoneos lipo -create -output "${CREATING_UNIVERSAL_DIR}/${EXECUTABLE_NAME}" "${CURRENTCONFIG_DEVICE_DIR}/${EXECUTABLE_NAME}" "${CURRENTCONFIG_SIMULATOR_DIR}/${EXECUTABLE_NAME}"



echo "Build complete!"

 

3. 빌드 설정을 ‘Release’로 설정한 후 빌드.

 

4. 빌드시 스크립트를 통해 디바이스와 시뮬레이터 빌드를 하며 ‘Release-universal’폴더에
두 빌드에 대한 Fat 라이브러리를 생성하여 준다.

5. ‘Release-universal’ 폴더에 생성된 Fat라이브러리 ‘libXXX.a’를 배포한다.

 

주의 : 빌드시 적용이 안될 경우 시뮬레이터 빌드를 한번 실행한 뒤 다시 시도해 봅니다.

 

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 앱 설치여부 체크

반응형

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

UIViewController 스위칭  (0) 2020.12.11
웹뷰에서 javascript 함수 동기식 호출  (0) 2020.12.10
Fat Static Library 빌드 (1/2)  (1) 2020.12.10
Custom UserAgent 설정  (0) 2020.12.10
CocoaPods 설치 및 제거  (0) 2020.12.10
블로그 이미지

SKY STORY

,
반응형

정적라이브러리 생성후 배포 시 시뮬레이터로 작업하는 프로젝트의 경우 라이브러리에 해당 아키텍쳐가 포함되어있지 않아 실행할 수 없는 상황이 발생하곤 합니다. 이럴경우 생성된 정적라이브러리에 해당 아키텍처를 포함시켜줄 수 있습니다.

아래의 과정은 배포하는 정적라이브러리를 사용하는 프로젝트에서 시뮬레이터 빌드가 가능하도록 Fat Static Library를 생성하는 방법입니다.

Fat Static Library(이하 Fat 라이브러리) 생성 순서

1. Device 용 빌드
빌드 패스에 ’Release-iphoneos’ 폴더에  저장 됨.

2. Simulator 용 빌드
빌드 패스에 ’Release-iphonesimulator’ 폴더에 저장 됨.

3. Xcode 메뉴에서 Project Seettings… 창을 열면 아래와 같이 빌드 디렉토리 경로를 볼 수 있다.

 

4. 또는 Xcode 의 Project Navigator 에서 Products에 빌드된 파일로 빌드된 디렉토리를 확인할 수 있다.

5. 위 4번 파일을 이용하여 빌드된 디렉토리로 이동하면 다음과 같다.

6. 빌드된 라이브러리 파일을 Device, Simulator에 따라 파일이름을 각각 ‘libXXXD.a’, ‘libXXXS.a’로 바꿔 Desktop에 복사한다.

7. 콘솔창을 띄워 Desktop폴더로 이동

cd ~/Desktop

8. 콘솔창에서 lipo명령을 통해 Device와 Simulator 로 빌드된 두 라이브러리를 합친다. 

lipo -create ./libXXXD.a ./libXXXS.a -output ./libXXX.a

9. 8번에서 생성된 Fat 라이브러리 Architectures 를 확인 하도록 한다.
lipo -I libXXX.a

10. 9 결과가 Device 아키텍쳐(armv7, arm64, armv7s) Simulator 아키텍쳐(i386, x86_64)
포함되었다면 정상이므로 ‘libXXX.a’ 배포하도록 한다.

 

 

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 앱 설치여부 체크

반응형

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

웹뷰에서 javascript 함수 동기식 호출  (0) 2020.12.10
Fat Static Library 빌드 (2/2)  (0) 2020.12.10
Custom UserAgent 설정  (0) 2020.12.10
CocoaPods 설치 및 제거  (0) 2020.12.10
Clang diagnostic 경고 무시하기  (0) 2020.12.10
블로그 이미지

SKY STORY

,

Custom UserAgent 설정

개발/iOS 2020. 12. 10. 15:21
반응형
//--------------------------------------------------------
/// WKWebView (type 1 - Objective C)
WKWebView *wkWebView = [[WKWebView alloc] initWithFrame:CGRectZero];
[wkWebView loadHTMLString:@"<html></html>" baseURL:nil];
[wkWebView evaluateJavaScript:@"navigator.appName" completionHandler:^(id __nullable appName, NSError * __nullable error) {
    NSLog(@"%@", appName);
}];

[wkWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id __nullable userAgent, NSError * __nullable error) {
    NSLog(@"%@", userAgent);
    // iOS 8.3
    // Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12F70
    // iOS 9.0
    // Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.32 (KHTML, like Gecko) Mobile/13A4254v
    // Custom UserAgent
    NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];
    NSString *newUserAgent = [NSString stringWithFormat:@"%@ %@", userAgent, appName];
    if (@available(iOS 9.0, *)) {
        wkWebView.customUserAgent = newUserAgent;
    } else {
        NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
        [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    }
}];

//--------------------------------------------------------
/// WKWebView (type 2 - Objective C)
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
configuration.applicationNameForUserAgent = @"My Custom Useragent Name";
WKWebView *wkWebView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
NSLog(@"%@", wkWebView.configuration.applicationNameForUserAgent); // My Custom Useragent Name
NSLog(@"%@", wkWebView.customUserAgent); // null
[wkWebView loadHTMLString:@"<html></html>" baseURL:nil];
[wkWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id __nullable userAgent, NSError * __nullable error) {
    NSLog(@"%@", userAgent);
    // iOS 9
    // Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.32 (KHTML, like Gecko) My Custom Useragent Name
}];

//--------------------------------------------------------
/// WKWebView (type 1 - Swift) Available: iOS 9+
wkWebView.evaluateJavaScript("navigator.userAgent") {
    [weak webView] (result, error) in
if let webView = webView, let userAgent = result as? String {
    webView.customUserAgent = userAgent + "/Custom Agent"
} }

//--------------------------------------------------------
/// WKWebView (type 1 - Swift) Available: iOS 9+
let webConfiguration = WKWebViewConfiguration()
let webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.customUserAgent = "ExampleApp/1.0 (iPhone)"

//--------------------------------------------------------
/// WKWebView (type 2 - Swift) Available: iOS 9+
/// Append to the default User Agent
let webConfiguration = WKWebViewConfiguration()
webConfiguration.applicationNameForUserAgent = "ExampleApp/1.0 (iPhone)"
let webView = WKWebView(frame: .zero, configuration: webConfiguration)
// Mozilla/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) ExampleApp/1.0 (iPhone)
 
//--------------------------------------------------------
/// UIWebView (Objective C)
UIWebView *webView = [[UIWebView alloc] init];
[webView loadHTMLString:@"<html></html>" baseURL:nil];
NSString *appName = [webView stringByEvaluatingJavaScriptFromString:@"navigator.appName"];
NSLog(@"%@", appName);
NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSLog(@"%@", userAgent);
// iOS 8.3
// Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12F70
// iOS 9.0
// Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.32 (KHTML, like Gecko) Mobile/13A4254v}

// Custom UserAgent
NSString *newUserAgent = [NSString stringWithFormat:@"%@ %@", userAgent, appName];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

//--------------------------------------------------------
/// UIWebView (Swift) Available: iOS 9+
webView.customUserAgent = (UIWebView().stringByEvaluatingJavaScript(from: "navigator.userAgent") ?? "") + "/Custom agent"



//--------------------------------------------------------
//--------------------------------------------------------
/// Example :

// UIWebView
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];
NSString *newUserAgent = [NSString stringWithFormat:@"%@ %@", userAgent, appName];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

// WKWebView
WKWebView *wkWebView = [[WKWebView alloc]initWithFrame:CGRectZero];
[wkWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id userAgent, NSError *error) {
    NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];
    NSString *newUserAgent = [NSString stringWithFormat:@"%@ %@", userAgent, appName];
    if (@available(iOS 9.0, *)) {
        wkWebView.customUserAgent = newUserAgent;
    } else {
        NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
        [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    }
}];

 

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 빌드 (2/2)  (0) 2020.12.10
Fat Static Library 빌드 (1/2)  (1) 2020.12.10
CocoaPods 설치 및 제거  (0) 2020.12.10
Clang diagnostic 경고 무시하기  (0) 2020.12.10
WKWebView 화면 출력 완료 이벤트  (0) 2020.08.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

 

 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

,
반응형

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

,