반응형

 * 아래 처럼 선언 하였을 때 기본값이 false가 된다.

var TestBool = Bool()

print(TestBool)  // false


 * 기본 값을 nil로 표현

var TestBool2: Bool? = nil

print(TestBool2) // nil


* 기본 값을 true로 표현

var TestBool3 = true

print(TestBool3)   // true


Bool 기본값을 블로그에 기재한 이유는..

TestBool = Bool() 하였을 경우, 기본으로 false의 값이 반환되는 것을 모르고 있었다.






반응형

'Programming > Swift' 카테고리의 다른 글

Notification - FCM 설정(2) : 선행 조건  (0) 2017.02.02
Notification - FCM 설정(1) : 참고 URL  (0) 2017.02.01
[ERROR] ITMS-90474  (0) 2017.01.27
AVFoundation  (0) 2017.01.18
[ERROR] Cocoapods : Abort trap: 6  (0) 2017.01.13
반응형

http://fliperamma.com/unity-and-ios-9-invalid-bundle-ipad-multitasking-support/


Appstore에 업로드를 하려는 경우 아래와 같이 에러가 발생하는 경우가 생긴다.




해결은 Info.plist에 키값을 추가하자.

<key> UIRequiresFullScreen </key>

<true /> 



반응형

'Programming > Swift' 카테고리의 다른 글

Notification - FCM 설정(1) : 참고 URL  (0) 2017.02.01
swift3 Bool 기본값  (0) 2017.01.31
AVFoundation  (0) 2017.01.18
[ERROR] Cocoapods : Abort trap: 6  (0) 2017.01.13
[ERROR] objc[8355]: Class PLBuildVersion is implemented in both  (0) 2017.01.12
반응형

http://iphonedevwiki.net/index.php/AudioServices

http://stackoverflow.com/questions/22850002/need-to-access-the-default-camera-shutter-sound-used-by-the-iphone


import AVFoundation

반응형
반응형

1. 문제

 $ pod install

...

Abort trap: 6


2. 해결

gem install cocoapods --pre 


$ pod install //정상적으로 작동 된다.

반응형

'Programming > Swift' 카테고리의 다른 글

[ERROR] ITMS-90474  (0) 2017.01.27
AVFoundation  (0) 2017.01.18
[ERROR] objc[8355]: Class PLBuildVersion is implemented in both  (0) 2017.01.12
[ERROR] Could not locate device support files.  (0) 2017.01.09
AppStore 통계 관련 설명 URL  (0) 2017.01.06
반응형

문제: photoLibrary에 접근 하고자 하였으나 아래와 같은 에러가 발생되어 다운되어 버렸다.

objc[8355]: Class PLBuildVersion is implemented in both

/Users/goodgods/Documents/Xcode8/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/

iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices (0x11b496998) and /Users/goodgods/Documents/Xcode8/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/

iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices (0x11c6edd38). One of the two will be used. Which one is undefined.


해결 : Xcode8부터 Info.plist에 추가를 해줘야한다.


Key : Privacy - Photo Library Usage Description

Value : PhotoLibrary

반응형

'Programming > Swift' 카테고리의 다른 글

AVFoundation  (0) 2017.01.18
[ERROR] Cocoapods : Abort trap: 6  (0) 2017.01.13
[ERROR] Could not locate device support files.  (0) 2017.01.09
AppStore 통계 관련 설명 URL  (0) 2017.01.06
swift3.0 2차 배열  (0) 2017.01.05
반응형

 1. Xcode 버전



2. Xcode 시뮬레이터 최대 iOS버전




3. 아이폰 버전




4. 결론

 - Xcode 에서 지원하는 OS 최대 버전 보다, 아이폰의 버전이 높을 경우 아래와 같은 에러 메세지를 보여,

아이폰에서 시뮬레이션을 할 수 가 없다.




반응형

'Programming > Swift' 카테고리의 다른 글

[ERROR] Cocoapods : Abort trap: 6  (0) 2017.01.13
[ERROR] objc[8355]: Class PLBuildVersion is implemented in both  (0) 2017.01.12
AppStore 통계 관련 설명 URL  (0) 2017.01.06
swift3.0 2차 배열  (0) 2017.01.05
swift3 한글url 처리  (0) 2016.12.19
반응형

http://blog.scottlogic.com/2014/03/20/app-store-analysis.html

반응형
반응형

1.

var product = [String:[String]]()

product = ["it":["phone","computer"],"school":["pen","note"]]

product["it"]?.append("tablet")


print(product

//["it": ["phone", "computer", "tablet"], "school": ["pen", "note"]]


product.updateValue(["handle"], forKey: "car")


print(product)  

//["it": ["phone", "computer", "tablet"], "car": ["handle"], "school": ["pen", "note"]


2.

var product2 = [String:[String:Any]]()

product2 = ["it":["phone":4],"school":["pen":2,"note":3]]


product2["it"]?.updateValue(1, forKey: "computer")  //it에 추가적으로 값을 넣는다.

print(product2)

["it": ["phone": 4, "computer": 1], "school": ["pen": 2, "note": 3]]


product2.updateValue(["android":1], forKey: "it") //it에 기존값을 제거하고 새롭게 넣는다.

print(product2)

["it": ["android": 1], "school": ["pen": 2, "note": 3]]


product2.updateValue(["handle":1,"gear":1], forKey: "car")  //car 값을 새롭게 넣는다.

print(product2)

["it": ["android": 1], "car": ["gear": 1, "handle": 1], "school": ["pen": 2, "note": 3]]


3.

var product2 = [String:[String:Any]]()

product2 = ["it": ["phone": 4, "computer": 1], "car": ["gear": 1, "handle": 1], "school": ["pen": 2, "note": 3]]


for name in product2.keys {

    print("My first key is \(name)") //1번째 key값을 가져온다.

     //My first key is it

     //My first key is car

    //My first key is school


    if let second = product2[name] {

        for (key, value) in second {

                       print("My Second key is \(key)")  //2번째 key값을 가져온다.

            //My Second key is phone

            //My Second key is computer

            //My Second key is handle

            //My Second key is gear

            //My Second key is pen

            //My Second key is note

            print("My value is \(value)") //value를 가져온다.

            //My value is 4

            //My value is 1

            //My value is 1

            //My value is 1

            //My value is 2

            //My value is 3

        }

    }

}

- 결과값

My first key is it

My Second key is phone

My value is 4

My Second key is computer

My value is 1

My first key is car

My Second key is handle

My value is 1

My Second key is gear

My value is 1

My first key is school

My Second key is pen

My value is 2

My Second key is note

My value is 3 


반응형
반응형

url에 한글이 존재할 경우 nil값을 반환하는 경우가 생긴다.


아래 예시를 변경해 보자.

let Orgurl = "http://blog.goodgods.com/page?"

let Value = "한글값"

let Parameter = "name=\(value)"


if let Url = URL(string: Orgurl+Parameter) {

}


변경 후

let Orgurl = "http://blog.goodgods.com/page?"

let Value = "한글값"


let EncodeValue = Value.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) {

    let Parameter = "name=\(EncodeValue)"


    if let Url = URL(string: Orgurl+Parameter) {

    }

}




반응형
반응형

itunesconnect에서 아이콘 이미지를 올려보았지만, 아래와 같은 메세지로 업로드가 되지 않았다.


 이미지는 알파 채널 또는 투명도를 포함할 수 없습니다


확장자를 PNG에서 JPG로 변경 후 올렸다.

포토샵에서 아이콘 이미지를 만들기 위해 투명도를 체크한 후 바탕화면에 투명도 없이 페인트로 전체 색을 하였지만, 파일 속성에 투명도 정보가 포함 되었나 싶기도 하다.


PNG확장자로 투명도를 해제 후 다시 만들어 확인 할 수 있겠지만, 귀찮아서 안했다.





반응형
반응형

8기가 이상되는 USB를 연결하여 말끔하게 NTFS로 포맷을 해준다.


우선 아래 파일을 다운 받아서 설치 후 실행 시킨다.

Windows7-USB.exe


1/4 단계에서 원본파일을 선택한다. 즉 윈도우의 iso 파일을 선택 후 다음을 누른다.

2/4 단계에서 USB 장치를 선택

3/4 단계에서 USB 드라이버를 선택(이미 자동 선택 되어 있을 것이다.) 후 복사 시작

4/4 복사가 완료되면 창을 닫는다.


설치 할 PC에 USB를 꽂고, 재부팅을 한 후 CMOS로 들어간다.

부팅 순서를 USB를 제일 처음으로 옮긴 후 재부팅을 하면 설치 진행이 가능하다.



반응형
반응형

몇 년만에 조립PC를 구매하여 윈도우7을 설치해보았다. 너무 오랜만에 하는 것이라 살짝 긴장이 되더군!ㅋㅋ

요즘 ODD를 사용하지 않는 것이 대세이기에, ODD는 구매하지 않았다.

기존에 있던 CD-ROM으로 설치하고자 하였으나, 계속적으로 윈도우7을 인식하지 못하거나, 부팅 또는 설치 중 다운 등등

문제가 발생하기 시작하였다.


처음에는  CD-ROM 또는 CD가 문제 인것으로 생각하였다.


그래서 USB로 설치 디스크를 만들었다. USB 설치 디스크 만드는 것은 아래 URL에서 확인 바란다.


http://blog.goodgods.com/435


그래도 CD로 하였을 때와 똑같은 증상이 발생되는 것이 아닌가..

몇시간을 고생하였지만, 결국에 설치 실패...


CD와 CD-ROM이 잘못되었는지 확인을 위해,

설치를 기다리고 있던 "ASRock B85M-DGS 디앤디컴" 을 장착한 저사양 PC에 우선적으로 설치를 해보았다.

문제없이 윈도우7을 설치하였다.


그러면 CD는 문제가 없는 것으로 판명..그럼 무엇이 문제란 말인가??


나의 메인보드는 "GIGABYTE GA-B150M-DS3H 듀러블에디션 피씨디렉트" !!

여기저기 구글링을 통하여 알아본바로는

윈도우7과 기가바이트 호환이 제대로 이루워지지 않는다는것..여러 이유가 있었으나, 이해를 못했다는..ㅠㅠ

윈도우7을 설치하는 방법도 있었으나 몇가지 시도를 해보고 포기...

오래동안 삽질을 하였기에..또 안되면 어쩌나 하는 걱정으로 전부 무시하고 윈도우 10을 선택하여 설치 완료..


내가 했던 방법은 틀렸던 것이 아니였다.

단지 윈도우7과 기가바이트 메인보드가 호환이 안되었던 것인데, 이걸 가지고 몇 시간을 소비했으니..지칠만도 하겠다.

아무튼 할 수 없이 윈도우 10으로 usb 설치를 완료하였다.


윈도우10을 설치 후 드라이버를 설치하는데 여기서 또 하나의 문제가 생겼다.
아래와 같은 에러로 그래픽 드라이버를 설치할 수가 없었다.

이 NVIDIA 그래픽 드라이버는 이 Windows 버전과 호환되지 않습니다.

나의 그래픽 카드는 "이엠텍 XENON 지포스 GTX1060 STORM X Dual D5 3GB" !!


또 구글링을 해보니, 윈도우 10 빌드 버전이 낮아서 설치를 할 수 없다는 얘기란다.
아래 URL은 그래픽카드도 동일 모델이고 같은 증상에 대한 해결방법이 잘 나와 있어, 큰 도움을 받았다.


윈도우 실행을 하여 윈도우 버전을 확인해 보자.
윈도우키 + R 후 winver 를 입력하면 윈도우 정보 창이 하나 뜬다.(여기서 버전을 확인해보자)
나의 버전은 1011 어쩌고 저쩌고 였던 듯..(기억이 안남)
아래 URL에서 업데이트를 할 수 있다.


업데이트 이후 정상적으로 설치가 된다.

너무 오랜만이라서 그런지...어렵다.
호환 안되는 것도 많고...제약사항이 왤케 많은 것인가..
왜 이렇게 호환성을 떨어트리는 것인지...하드웨어 회사의 문제인지...OS 회사의 문제인지..

예전에 눈감고도 했었는데...이제 PC 조립도 못해먹겠구나..세월이 가면~~~~~



반응형
반응형

정말 혼란스럽고 헷갈립니다.

똑같은 기능을 하고 있는데, 왜 이렇게 서비스가 많은 것인지..

솔직히 아직도 잘 모르는게 사실입니다.


다만 지금까지 경험 했던 바로 한줄로 요약을 한다면.....


애드워즈(adwords)

 - 광고주가 광고를 만들어 애드센스(adsense)로 통해 광고가 나가게 되고, 여기에 클릭 이벤트가 발생되면, 비용이 지불 됨.

 - 즉, 광고를 만드는 곳이라고 생각해야 할 듯?


애드센스(adsense)

 - 광고주들이 애드워즈에 등록한 광고들을 애드센스에서 보여주는 것이다.

 - 즉, 블로그에 등록된 광고들을 애드센스를 통하여 볼 수 있는 것이라 봐야 할 듯?


애드몹(admob)

 - 모바일 버전의 애드센스라고 생각하면 될 듯?

 - 즉, 애드센스는 블로그 같이 웹페이지 부분에 등록될 수 있는 광고 컨텐츠이며, 애드몹은 모바일에 등록된 광고 컨텐츠라 보면 될 듯?


파이어베이스(firebase) | 구글 애널리틱스(GA : Google Analytics)

 - 애드센스와 애드몹의 차이와 동일할 것으로 본다.

 - 파이어베이스는 모바일 통계 데이터, GA는 웹페이지 부분에 등록되는 통계 데이터?


정확하게 맞다고는 장담 할 수가 없습니다.

현재 저도 계정 통합을 시도하다 문제가 발생되어 삽질을 하고 있는 중이거든요. :(

삽질을 하면서 도데체 컨텐츠를 만드는 것보다 광고를 넣고 관리하는게 더 어렵다고 느끼는 것은 저뿐일까요?

뭐가 이렇게 어려운지...설명을 읽어봐도 무슨 말인지 모르겠고..


누군가가 제대로 알려주었으면 좋겠다~~~~~~ ; (

알려주십시요~ㅠㅠ



반응형

'etc' 카테고리의 다른 글

GDPR Privacy  (0) 2023.09.12
후이즈에서 호스팅 추가  (0) 2016.05.16
온라인 포토샵 url  (0) 2011.06.15
반응형

itunesconnect에서 심사를 위해 빌드 파일을 선택하였을 때, 아래 메세지 처럼 나오는 경우가 있다.



나 같은 경우, 처음 iphone을 배포를 시작 한 후, 나중에 ipad를 지원되게 하였다.

해당 문구로 인해 문제가 발생될 수 있다는 것을 감지하여,


여러 곳을 찾던 중, itunesconnect의 일종의 버그 같은 것이니, 무시하라는 말이 있었다.

수정하기도 귀찮고, 리젝당하면 그때 다시 수정하자는 마음으로 무시를 하였다.


아무 이상없이 심사가 통과 되었다.

iphone은 수정된 것이 없지만, 일단 업데이트...

ipad App Store에 보여지는지 확인을 하였다.

헐.....보여지지 않는다....


리젝 될 줄 알았던 것이 정상통과 되었고, 사용자들은 아무 의심없이 업그레이드를 할 것이다.

해당 오류를 수정하고 다시 심사제출하면...또 업데이트를 해야하는 사용자들의 짜증이 느껴지는군...OTL


급하게 아래와 같이 수정을 하였다.

문제는 간단한 듯 하다.


PROJECT - TARGETS - Build Settings 의 Targeted Device Family 의 값을 1,2 로 수정은 하였으나,

PROJECT의  - Build Settings의 Targeted Device Family의 값은 수정 하지 않았다.


이 부분을 수정한 후 다시 업로드를 해보니 문제의 메세지가 사라졌다.



반응형
반응형


iPad가 지원되게 수정 후 심사 제출을 하려고 하였지만, 위 와 같은 에러가 발생하였다.



Devices에 iPhone, iPad, Universal을 각각 확인을 해보면, 아래 Requires full screen 체크가 안되어 있는 것이 있다.

이 부분을 체크를 한 후에 다시 컴파일 후 업로드를 해보자.

반응형
반응형

정확한 것인지는 모르겠으나, 테스트를 한 방법을 설명하겠다.


우선 프로젝트의 그룹을 iphone과 ipad를 만든 후, 각각 스토리보드 및 ViewController를 생성/재배치 하였다.


각 스토리보드는 형태를 다르게 label을 생성하였다.









Info.plist 설정값을 보자.

아래 "Main strobyoard file base name (iPad)를 추가해주고 Value는 생성한 스토리보드 이름을 넣어준다.


TARGETS의 General을 보면 Devices에는 iPhone, iPad, Universal 3가지를 선택할 수 있는데,

이부분을 선택하여 "Main Interface"의 기본 스토리보드를 선택해주면 된다.


이 후 아이패드 일때와 아이폰 일때 각각 시뮬레이션을 하면, 설정한 스토리보드 대로 UI가 표시가 될 것이다.

반응형
반응형

var str = "Hello, playground"


 * 앞자리 기준

 - 0번째 자리 부터

let start = str.index(str.startIndex, offsetBy: 0

str.substring(from: start)  //Hello, playground 출력


 - 2번째 자리 부터

  => "offsetBy: 2"의 숫자 2는 2번째 자리가 아니라 3번째 자리이다.

       index는 0부터 시작하므로, 즉 3자리미만으로 해석해야함.

let end = str.index(str.startIndex, offsetBy: 2)

str.substring(from: end)  //llo, playground 출력


 * 뒷자리 기준

 - 뒤에서 4번째 자리 부터

let end = str.index(str.endIndex, offsetBy: -4)

str.substring(from: end)  //ound 출력



 * substring

 - 1번째 자리부터 2자리만 가지고 온다.

let start2 = str.index(str.startIndex, offsetBy: 2)

let range = start ..< start2

str.substring(with: range)  //He 출력


 - 3번째 자리부터 끝에서 4번째자리 이전까지만 가지고 온다.

let range2 = start ..< end

str.substring(with: range2)  //llo, playgr 출력


var replaceStr = "This is my string"


 * replace

let NewString = replaceStr.replacingOccurrences(of: " ", with: "+")

print(NewString) //This+is+my+string



종합하여, 해당 범위에 있는 문자를 추출하고자 한다면...

예시로 "my"를 "your"로 바꾸어 출력해 보겠다.

let begin = replaceStr.index(replaceStr.startIndex, offsetBy: 8)

let finish = replaceStr.index(replaceStr.endIndex, offsetBy: -7)

let NewRange = begin ..< finish

let StringNew = replaceStr.replacingOccurrences(of: replaceStr.substring(with: NewRange), with: "your")

print(StringNew)  //This is your string 출력



playground

//: Playground - noun: a place where people can play


import UIKit


let channel = "asdfg35sahadhxbadgaswgreh"



let start5 = channel.index(channel.startIndex, offsetBy: 0)

let end5 = channel.index(channel.startIndex, offsetBy: 2)

let range5 = start5 ..< end5

channel.substring(with: range5)  // play

let name5 = channel.replacingOccurrences(of: channel.substring(with: range5), with: "UU")


var str = "Hello, playground"

let start = str.index(str.startIndex, offsetBy: 0)

str.substring(from: start)


let start2 = str.index(str.startIndex, offsetBy: 2)

str.substring(from: start2)


let end = str.index(str.endIndex, offsetBy: -4)

str.substring(from: end)



let range = start ..< start2

str.substring(with: range)


let range2 = start2 ..< end

str.substring(with: range2)


let replaceStr = "This is my string"

let NewString = replaceStr.replacingOccurrences(of: " ", with: "+")

print(NewString)


let begin = replaceStr.index(replaceStr.startIndex, offsetBy: 8)

replaceStr.substring(from: begin)

let finish = replaceStr.index(replaceStr.endIndex, offsetBy: -7)

replaceStr.substring(from: finish)

let NewRange = begin ..< finish

replaceStr.substring(with: NewRange)

let name = replaceStr.replacingOccurrences(of: replaceStr.substring(with: NewRange), with: "your")

print(name)




let ins = "select a from name"

//ins.indexes(of: " ")

var rang = ins.range(of: " ")

var aaa = ins.indexes(of: " ")


print(aaa[1])


extension String {

    func index(of string: String, options: String.CompareOptions = .literal) -> String.Index? {

        return range(of: string, options: options)?.lowerBound

    }

    func indexes(of string: String, options: String.CompareOptions = .literal) -> [String.Index] {

        var result: [String.Index] = []

        var start = startIndex

        while let range = range(of: string, options: options, range: start..<endIndex) {

            result.append(range.lowerBound)

            start = range.upperBound

        }

        return result

    }

    func ranges(of string: String, options: String.CompareOptions = .literal) -> [Range<String.Index>] {

        var result: [Range<String.Index>] = []

        var start = startIndex

        while let range = range(of: string, options: options, range: start..<endIndex) {

            result.append(range)

            start = range.upperBound

        }

        return result

    }

}


반응형
반응형

흔히 컴퓨터에서 실행취소(command+z, ctrl+z)를 무의식적으로 많이 사용하고 있다.


그런데 아이폰에 기본 어플이 메모를 종종 사용을 하게 되는데,

가끔 지우기 버튼을 오래 누르고 있다보니 지우지 말아야 할 것 까지 지워져서 당황한 경우가 많이 있다.


이럴 경우 이제는 당황하지 말자..


이전으로 되돌리고 싶으면 아이폰을 흔들어 주어라..

실행취소 버튼을 누르면 이전 값으로 되돌아 간다.



다만 여기서 주의해야 할 점은....

설정에서 흔들어서 실행 취소가 켜짐으로 있어야 한다.

설정 > 일반 > 손쉬운 사용 > 흔들어서 실행 취소



반응형
반응형

itunes Connect 사용하기 헷갈리고 정말 어렵지 않은가? ㅜㅜ


지금도 삽질하면서 잘못 기입되거나, 삭제하고 싶은 것들이 상당히 많다. ㅜㅠ


많이 생기는 일은 아니겠지만, 보통 tvOS앱을 버튼을 잘 못 클릭하여 "제출 준비상태" 가 되곤 할지도 모른다.

itunes에 "제출 준비상태" 로 된 앱을 삭제하려고 이것저것 찾아보다 이것저것 클릭하다가 버전 및 플랫폼 을 클릭 하게 되었다.

차라리 처음부터 다시 만들었으면 만들었지, 나같은 경우 성격 상 이런 것을 그냥 못 보고 지나친다.

(참고로 알아본 바, 앱 삭제는 한번 승인 받았던 앱에 대해서만 삭제가 가능 하다고 한다. 그러면 승인 받지 못한앱은 어쩌란 말인가? 3개월인가.. 몇개월 지나면 애플에서 삭제하겠다고 메일을 보내준다고 한다. - 그때까지 기다려 ㅡㅡ;;;;)


삭제하는 법을 몰라... 앱 제출할 때 tvOS 은 사용 되지 않는다고 메모를 해서 제출 하였다만...

나중에 알고 보니 삭제는 정말 간단하더군.. 어이 없음


마우스를 올려보니 빨간 색 삭제버튼이 살짝 나타났다.

이것도 이것 저것 보다가 우연히 발견..ㅠㅠ


삭제 버튼 클릭 하면 된다.


아 정말 어렵다!!  itunesConnect 여.....

반응형
반응형

 - 본 설명은 윈도우가 아닌 맥에서 사용할 수 있는 USB를 포맷하는 과정이다.


1.디스크 유틸리티 선택



2. 포맷을 usb 또는 외장 장치를 선택




- 포맷의 리스트를 보면 아래와 같다.

: 윈도우에서 사용을 하기 위함은 ExFAT를 선택해야한다.

: OS X 확장(저널링) 은 맥에서만 사용할 수 있다. 윈도우에서 보면 포맷하라고 뜨니 주의를 하기 바란다.

반응형
반응형

$ pod install 

아래와 같은 메세지가 나왔을 경우.

[!] The `TESTCocoaPods [Debug]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-TESTCocoaPods/Pods-TESTCocoaPods.debug.xcconfig'. This can lead to problems with the CocoaPods installation

    - Use the `$(inherited)` flag, or

    - Remove the build settings from the target.


[!] The `TESTCocoaPods [Release]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-TESTCocoaPods/Pods-TESTCocoaPods.release.xcconfig'. This can lead to problems with the CocoaPods installation



반응형
반응형

http://stackoverflow.com/questions/37851459/the-document-main-storyboard-requires-xcode-8-0-or-later


xcode 7 에서 시뮬레이터를 실행시킬때, 또는 스토리보드를 클릭하여 화면을 보고자 할 때 아래와 같은 오류가 발생하였다.




해당 오류는 프로젝트가 Xcode8.0으로 설정이 되어 있어서 그렇다.

Xcode8.0으로 프로젝트를 실행시킨다.



스토리보드를 선택한 후 위와 같이 설정을 바꿔주고 Xcode7로 다시 실행시킨다.

그래도 되지 않는다면..


스토리보드 마우스 우클릭하여 소스코드를 선택한다.



아래와 같은 코드를 찾아서 삭제한다.

<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> 


다시 실행을 시키면 제대로 작동이 된다.

반응형
반응형

- Main storyboard에서 버튼을 클릭 하였을 때 Sub storyboard로 이동하는 것을 테스트 해 볼 것이다.


1. 우선 또 다른 스토리보드를 생성하자.(SubMain.storyboard)



2. 새로운 스토리보드에 아무 컨트롤러를 만들어 놓자(SubViewController.swift)



3. Main.storyboard에 버튼을 만들고 Storyboard Reference 를 드래그하여 Main.storyboard에 넣자.



4. 버튼과 Storyboard Reference와 연결 시킨 후 오른쪽 상단과 같이 지정한 서브 스토리보드 명과 컨트롤러 이름을 지정하여 실행시켜보자.


반응형
반응형

http://stackoverflow.com/questions/39377807/strange-terminal-messages-in-xcode-8


Xcode8에서 아무작업도 하지 않고 시뮬레이션을 하였다.

터미널에서 아래와 같은 문구가 발생하였다.

2016-09-23 15:54:23.701321 TestStoryBoard[9522:420281] subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

2016-09-23 15:54:23.708568 TestStoryBoard[9522:420281] subsystem: com.apple.UIKit, category: HIDEventIncoming, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

2016-09-23 15:54:23.724923 TestStoryBoard[9522:420274] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 1, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0, enable_private_data: 0

2016-09-23 15:54:23.930622 TestStoryBoard[9522:420177] subsystem: com.apple.siri, category: Intents, enable_level: 1, persist_level: 1, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0, enable_private_data: 0

2016-09-23 15:54:24.010428 TestStoryBoard[9522:420177] subsystem: com.apple.Accessibility, category: AccessibilityBundleLoading, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

2016-09-23 15:54:24.060352 TestStoryBoard[9522:420177] subsystem: com.apple.UIKit, category: StatusBar, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

2016-09-23 15:54:24.171057 TestStoryBoard[9522:420177] subsystem: com.apple.BackBoardServices.fence, category: App, enable_level: 1, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0, enable_private_data: 0

2016-09-23 15:54:24.428111 TestStoryBoard[9522:420177] subsystem: com.apple.Accessibility, category: VOTHandwriting, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

2016-09-23 15:54:25.402295 TestStoryBoard[9522:420177] subsystem: com.apple.Accessibility, category: ElementTraversal, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

2016-09-23 15:54:26.158518 TestStoryBoard[9522:420177] subsystem: com.apple.UIKit, category: Touch, enable_level: 0, persist_level: 0, default_ttl: 1, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

2016-09-23 15:54:26.159825 TestStoryBoard[9522:420177] subsystem: com.apple.UIKit, category: Gesture, enable_level: 0, persist_level: 0, default_ttl: 1, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

2016-09-23 15:54:26.160907 TestStoryBoard[9522:420177] subsystem: com.apple.UIKit, category: GestureEnvironment, enable_level: 0, persist_level: 0, default_ttl: 1, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

2016-09-23 15:54:26.161597 TestStoryBoard[9522:420177] subsystem: com.apple.UIKit, category: GestureExclusion, enable_level: 0, persist_level: 0, default_ttl: 1, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0



아래와 같이 해보자.



반응형
반응형

Guard에 대해서는 설명이 잘 나온 글들이 많다.

완벽하게 이해하지는 못하였지만 느낌은 알 것 같은..

설명은 쓸 수 없지만.. 잊지않기 위해 활용한 소스라도 올려본다.



 * 처음 테스트로 작성한 코드

var ValueNil:String? = nil

ValueNil = "Guard"


func guardTest() {

    guard ValueNil != nil else {

        print("bad")

        return

    }


    print(ValueNil)

}

guardTest() // 출력은 Optional("Guard")



 - 그러나 여기서 Optional이 붙어 버리니 어찌해야하나..

 - Guard 부분에서 nil을 체크하였기 때문에 print에서 "!" 를 붙여도 상관이 없음.

 - 그러나 "!" 자체가 불안하다.

 - 그래서 물어본 결과...단순한 사실을 잊고 있었다.


var ValueNil:String? = nil

ValueNil = "Guard"

func guardTest() {

    guard let tmp = ValueNil else {

        print("bad")

        return

    }

    print(tmp)

}

guardTest()  // 출력은 Guard


- guard를 사용하게 되면 이후 소스에서도 계속적으로 언래핑된다는 것이다.

- 쓸데없는 if let을 사용을 줄일 수가 있다고 한다.

반응형
반응형

http://chanlee.github.io/2015/06/14/Introduce-Swift-Optional/

https://www.appcoda.com/beginners-guide-optionals-swift/

https://devxoul.gitbooks.io/ios-with-swift-in-40-hours/content/Chapter-2/optionals.html


playground에서 예제를 똑같이 실행해 보았다.

import UIKit


class Messenger {

    var message1: String = "Swift is awesome"

    var message2: String?

}


func findStockCode(company: String) -> String? {

    if (company == "Apple") {

        return "AAPL"

    } else if (company == "Google") {

        return "GOOG"

    }

    

    return nil

}


var stockCode:String? = findStockCode("Facebook")

let text = "Stock Code - "

//let message = text + stockCode!

//print(message)



if let tmpStock = stockCode {

    let message = text + tmpStock

    print(message)

}


if var stockCode = findStockCode("Facebook") {

    let message = text + stockCode

    print(message)

}



class Stock {

    var code: String?

    var price: Double?

}


func findStockCode2(company: String) -> Stock? {

    if (company == "Apple") {

        let aapl: Stock = Stock()

        aapl.code = "AAPL"

        aapl.price = 90.32

        

        return aapl

    } else if (company == "Google") {

        let goog: Stock = Stock()

        goog.code = "GOOG"

        goog.price = 556.36

        

        return goog

    }

    return nil

}


if let stock = findStockCode2("Apple") {

    if let sharePrice = stock.price {

        let totalCost = sharePrice * 100

        print(totalCost)

    }

}


if let sharePrice = findStockCode2("Apple")?.price {

    let totalCost = sharePrice * 100

    print(totalCost)

}


반응형

'Programming > Swift' 카테고리의 다른 글

Xcode8에서 발생되는 메세지  (0) 2016.09.23
Guard 활용  (0) 2016.09.13
아이폰7(?) 발표 5시간전 apple developer 등록이 안된다  (0) 2016.09.07
xcode 자동 줄바꿈 설정  (0) 2016.09.07
status bar 색상 변경  (0) 2016.09.05
반응형

developer로 결재하기 위해 굳은 마음으로 카드를 옆에 두고 개발자 결재 등록 사이트로 들어갔다.

왠걸 아래와 같이 나온다.


발표 때문에 잠시 중단을 시킨 것 같다.

각 나라 언어로 동일한 문구를 차례대로 출력시키는 것 같다. 한국어는 15개(?) 언어 중 10번쯤(?)에 출력되고 있는 것 같더라.


큰 맘먹고 개발자 등록 해보려고 했는데..ㅜㅜ

발표끝나면...내일 되겠지...


반응형
반응형

무엇을 잘 못 눌렀는지 갑자기 자동 줄 바꿈이 되지 않는 것이다.



어지간히 불편한게 아니였다. 화면도 작은데..ㅠㅠ

제대로 나와있는게 없더라.. 그래서 더 열심히 찾아봤다.

http://stackoverflow.com/questions/5271530/how-to-disable-word-wrap-in-xcode-4-editor




위 Line wrapping 에 체크를 하였더니 잘 됨.



특정페이지에서만 자동 줄바꿈이 되지 않는다면, 아래 이미지 처럼 Wrap lines 체크해보자.



반응형
반응형

복사 : Command +  c

붙여넣기 : Command + v

잘라내기 : Command + Option + v

반응형
반응형

* AppDelegate

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        // Override point for customization after application launch.

        UIApplication.sharedApplication().valueForKey("statusBar")?.setValue(UIColor.redColor(), forKey: "foregroundColor")

        return true

    } 



- swift 3.0

//        let statWindow = UIApplication.shared.value(forKey:"statusBar") as? UIView

        

//        if let sub = statWindow?.subviews[0] {

//            let statusBar = sub as UIView

//            statusBar.backgroundColor = UIColor(red: 206/255.0, green: 206/255.0, blue: 210/255.0, alpha: 1.0)

//        }

//        

반응형

+ Recent posts