Cordova + iOS 10: NSCameraUsageDescription missing, NSPhotoLibraryUsageDescription

얼마전까지 PhoneGap 과 Cordova 를 이용해서 iOS App을 만들고 있었는데 몇일전 기능을 수정할 일이 있어서 수정후 다시 앱스토어에 올릴려고 하니 아래와 같은 이메일을 받게 되었다.

Dear developer,

We have discovered one or more issues with your recent delivery for "Meals Delivered". To process your delivery, the following issues must be corrected:
This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.
This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

해결 방법을 찾다 찾다 찾아내어서 해결 ^^
아래의 코드를 config.xml 에 넣어주고 PhoneGap 에서 컴파일 후 업로드하면 끝!!

<plugin name="cordova-plugin-media-capture" source="npm" spec="*">
	<variable name="CAMERA_USAGE_DESCRIPTION" value="App would like to access the camera." />
	<variable name="MICROPHONE_USAGE_DESCRIPTION" value="App would like to access the microphone." />
	<variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="App would like to access the library." />
</plugin>

NSCameraUsageDescription, NSMicrophoneUsageDescription, NSPhotoLibraryUsageDescription 이 3가지 항목이 프라이버시 관련해서 문제가 발생하는 것으로 확인되었다.

마우스휠 Normalise

브라우져별로 마우스 휠이 스크롤될때의 값이 틀리기 때문에 경우에 따라서는 값을 보정해 주어야 하는 경우가 발생한다.

아래 코드는 브라우져별로 값을 보정해 주는 스크립트.

window.onload = function(){
	var wheelDistance = function(evt){
		if (!evt) evt = event;
		var w=evt.wheelDelta, d=evt.detail;
		if (d){
			if (w) return w/d/40*d>0?1:-1; // Opera
			else return -d/3;              // Firefox;         TODO: do not /3 for OS X
		} else return w/120;             // IE/Safari/Chrome TODO: /3 for Chrome OS X
	};
}

cPanel 이메일 에러 : has exceeded the max defers and failures per hour (5/5)

cPanel/WHM 을 관리하다 보면 아래와 비슷한 내용의 바운스 백 에러 메세지가 돌아오는 경우가 있다.


Domain example.com has exceeded the max defers and failures per hour (5/5 (100%)) allowed. Message discarded.

  1. SSH 를 이용해서 cPanel/WHM 호스팅 서버에 접속한다.
  2. 로그인 후, 아래의 경로로 이동한다.

  3. /var/cpanel/email_send_limits

    위 경로로 이동하면 defer 된 도메인과 관련된 파일이 있을 겁니다. 해당 파일을 삭제 합니다.

    그 다움 exim 을 재시작 해주면 강제로 위 defer 에러를 리셋하고 해당 도메인은 한시간을 기다릴 필요 없이 다시 메일을 정상적으로 발송할 수 있게 된다.


    /etc/init.d/exim restart

워드프레스 우커머스 – 장바구니 버튼 이름 변경 방법

오늘은 워드프레스(WordPress) 온라인 쇼핑몰 플러그인(Plugin)인 우커머스(WooCommerce)의 장바구니(카트) 버튼 이름을 변경하는 방법을 설명하겠습니다.

상품 아카이브 페이지의 장바구니 버튼명 변경 방법

활성화된 테마 폴더 밑의 functions.php 파일을 사용하시는 에디터툴로 엽니다.

우커머스(WooCommerce) 버전 2.1 이하

add_filter( 'add_to_cart_text', 'my_archive_custom_cart_button_text' );
function my_archive_custom_cart_button_text() {
 
        return __( 'My Button Text', 'woocommerce' );
 
}

우커머스(WooCommerce) 버전 2.1 이상

add_filter( 'woocommerce_product_add_to_cart_text', 'my_archive_custom_cart_button_text' );
function my_archive_custom_cart_button_text() {
 
        return __( 'My Button Text', 'woocommerce' );
 
}

상품 디테일(싱글) 페이지의 장바구니 버튼이름 변경 방법

활성화된 테마 폴더 밑의 functions.php 파일을 사용하시는 에디터툴로 엽니다.

우커머스(WooCommerce) 버전 2.1 이하

add_filter( 'add_to_cart_text', 'my_custom_cart_button_text' );    // < 2.1
function my_custom_cart_button_text() {
 
        return __( 'My Button Text', 'woocommerce' );
 
}

우커머스(WooCommerce) 버전 2.1 이상

add_filter( 'woocommerce_product_single_add_to_cart_text', 'my_custom_cart_button_text' );    // 2.1 +
function my_custom_cart_button_text() {
 
        return __( 'My Button Text', 'woocommerce' );
 
}

상품 아카이브 페이지의 장바구니 상품타입에 따라 버튼이름 변경 방법

활성화된 테마 폴더 밑의 functions.php 파일을 사용하시는 에디터툴로 엽니다.

add_filter( 'woocommerce_product_add_to_cart_text' , 'my_woocommerce_product_add_to_cart_text' );
function my_woocommerce_product_add_to_cart_text() {
	global $product;
	
	$product_type = $product->product_type;
	
	switch ( $product_type ) {
		case 'external':
			return __( 'Buy product', 'woocommerce' );
		break;
		case 'grouped':
			return __( 'View products', 'woocommerce' );
		break;
		case 'simple':
			return __( 'Add to cart', 'woocommerce' );
		break;
		case 'variable':
			return __( 'Select options', 'woocommerce' );
		break;
		default:
			return __( 'Read more', 'woocommerce' );
	}
	
}

오늘은 워드프레스(WordPress)의 장점이라 할 수 있는 기능중의 하나인 필터기능으로 우커머스(WooCommerce)의 장바구니 버튼명을 변경하는 방법에 대해 소개하였습니다. 다음번에도 유용한 팁을 좋은 포스팅으로 찾아뵙겠습니다 ^-^

연관글: 우커머스(WooCommerce) – 페이팔 결제 버튼 텍스트 변경 방법

우커머스, WooCommerce, WordPress – 페이팔 결제 버튼 텍스트 변경

워드프레스(WordPress)는 CMS(Contents Management System)으로 개인 블로그를 쉽게 만들고 컨텐츠를 작성하기 쉽게 사용하기 위해 태어났다. 하지만 근 몇년 동안 우커머스(WooCommerce) 플러그인(plugin)을 설치해서 소규모의 온라인 쇼핑몰을 제작하기 쉽게 되었다.

오늘은 워드프레스(WordPress)에서 제공하는 filter를 이용하는 방법을 소개하려고 한다. 물론 플러그인(plugin) 또는 워드프레스(WordPress)에서 후킹이나 필터링을 제공하지 않는다면 플러그인(plugin) 또는 워드프레스(WordPress) 코어파일을 직접 수정해야만 한다. 이는 플러그인(plugin) 또는 워드프레스(WordPress)가 업데이트가 되었을때 직접 수정한 코드가 지워지기 때문에 플러그인(plugin) 또는 워드프레스(WordPress)를 직접 수정하는 것은 좋지 않은 방법이다.

현재 활성화된 theme 폴더 밑에 functions.php 파일은 연다.

제일 밑에 아래 코드를 삽입하면 끝이다. 물론 위치는 상관없다.

add_filter( 'gettext', 'custom_paypal_button_text', 20, 3 );
function custom_paypal_button_text( $translated_text, $text, $domain ) {
	switch ( $translated_text ) {
		case 'Proceed to PayPal' :
			$translated_text = __( 'NEW BUTTON TEXT', $domain );
			break;
	}
	return $translated_text;
}

하이라이트 된 5번라인에서 NEW BUTTON TEXT를 변경 원하는 내용으로 바꿔주고 저장하면 끝!

연관글: 워드프레스(WordPress) 우커머스(WooCommerce) – 장바구니 버튼 이름 변경 방법