맥 모하비 업데이트 후 invalid active developer path 오류 날 때

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 위와 같은 오류가 난다. 모하비 업데이트 후 git 을 사용할 때 나는 오류이다. 이와 같은 오류는 Xcode command line tool 을 재설치하면 된다. $ xcode-select --install 그러면 설치 화면이 뜬다.

우분투 서버에서 패킷 캡쳐와 몽고디비 사용하기

서버에 우분투를 설치하고 나머지 모듈은 deb 또는 소스로 받아서 설치했다. 왜 그러냐고.... 우리 서버는 외부와 단절되어 있다. ㅠㅠ 안정성을 위해서 Ubuntu 16.04.5 LTS 설치하였다. 아무래도 최신 판은 휼륭한 사람들이 테스트하기 때문이다. 패킷캡쳐를 하기 위해서는 다음과 같은 라이브러리가 필요하다. libpcap, libpcap-dev 이 두개를 deb 파일을 받아서 설치하면 된다. $ sudo apt-get install ./libpcap.deb <- 이런식으로 설치한다 그러면 /usr/include/pcap.h 파일과 pcap 폴더가 생긴다. 이제 스위프트를 사용하려면 clang, libicu-dev 가 필요하다. 위와 같은 방법으로 설치한다. 스위프트 파일을 받아서 홈페이지에 나온 안내대로 압축을 풀고 링크를 건다. 이제 몽고디비를 설치한다. 이것도 소스를 받아서 설치한다. 이제 몽고키튼이라고 스위프트용 프레임을 설치한다. $ mkdir OpenKitten $ cd OpenKitten $ mkdir MongoKitten $ cd MongoKitten $ git clone https://github.com/OpenKitten/MongoKitten.git $ git tag $ cd .. 이제 pcap 라이브러리 설정을 한다 $ mkdir pcap $ cd pcap $ swift package init --type system-module $ vim module.modulemap module pcap [system] {   header "/usr/include/pcap.h"   link "pcap"   export * } $ vim Package.swift import PackageDescription let package = Package(   name: "pcap",   pkgConfig: "pca...

Server Side Swift 에서 Memory 해제가 안되어 무한 증가할 때 조치 법

몽고디비에 자료를 가져와서 가공을 한 뒤에 다시 몽고디비에 자료를 저장하는 프로그램을 서버용 스위프트로 작성하였다. 하지만 아래와 같이 작성했을 때는 실행을 하면 메모리 해제가 안되어 무한증식하는 상태가 발생되었다. import Foundation import MongoKitten do {     let mongo = try Server("mongodb://localhost:27017")     let db = mongo["db"]     if mongo.isConnected { print("connected successfully to server") }     let collection = db["collection"]     let docu: Document = []     let query = Query(docu)     var textLog = TextLog()     do {         for entity in try collection.find(query) {             trainLocations.forEach {                 textLog.write("\($0.date.Format(into: "yyyy-MM-dd HH:mm:ss Z")) \n")             }         }  //end_for entity in try collection.find(query)     } catch { print("error -> \(error.localizedDescr...

Server 용 Swift 로 MongoDB 연동하기

먼저 서버에서 해당 폴더를 생성한다. $ mkdir mongoSwift $ cd mongoSwift 이제 스위프트 패키지을 이용해서 기본 파일들을 생성한다. $ swift package init --type=executable 패키지 내용에 몽고키튼을 추가한다. Package.swift 파일 수정 import PackageDescription let package = Package(     name: "mongoSwift",     dependencies: [.package(url: "https://github.com/OpenKitten/MongoKitten.git", from: "4.0.0"),],     targets: [.target(name: "mongoSwift", dependencies: ["MongoKitten"])] ) 패키지를 업데이트하면 설정된 몽고키튼의 파일들을 다운로드 받는다. $ swift package update 이제 엑스코드용 파일을 생성한다. $ swift package generate-xcodeproj xcode 에서 파일을 열어서 수정하면 된다. import MongoKitten let server = try Server("mongodb://localhost:27017") let database = server["packet_db"] if server.isConnected {     print("Connected successfully to server") } let collection = database["tcp_collection"] for document in try collection.find() {     print(document) } 몽고디비 검색 방법 db.tcp_collectio...

Server 용 Swift 로 Packet Capture Program 작성하기

현재 스위프트 지원 서버는 우분투만이 가능하다. 센토스도 설정을 맞추면 가능하긴 한데 정신건강을 위해 우분투를 사용하자. Ubuntu 16.04 에서 Swift 를 설치하자 $ sudo apt-get install clang libicu-dev 이제 swift.org 에서 스위프트 압축된 파일을 다운로드 받는다. $ wget -q -0 -https://swift.org/keys/all-keys.asc $ tar xzf swift-<VERSION>-<PLATFORM>.tar.gz 이 명령은 /Home/user 밑에서 실행하여 하위로 푼다. $ export PATH=/Home/user/usr/swift-4.0.3-RELEASE-ubuntu16.04/usr/bin:"${PATH}" 패스를 추가했다. $ swift Welcome to Swift version 4.0.3 어쩌고 나오면 성공한 것이다. 이제 libpcap Library 를 설치해보자. $ sudo apt-get install libpcap-dev 이제 Swift 로 Packet Capture 할 준비가 되었다. Cpcap 이란 폴더를 생성하자. $ mkdir Cpcap $ cd Cpcap 여기서 파일을 2개를 만들것이다. $ touch Package.swift $ touch module.modulemap Package.swift 내용을 이렇다. import PackageDescription let package = Package(name: "Cpcap") module.modulemap 내용을 이렇게 작성한다. module Cpcap [system] {   header "/usr/include/pcap.h"   link "pcap"   export * } 이제 git 을 생성해야 한다. /Pcap 폴더에 위치한 지 확인 후 생성한다. ...

CryptoSwift 사용하여 암호화 및 복호화 하는 방법

일단 관련 모듈을 사용할 수 있는 환경을 만들자 cocoapods 를 이용하여 설치한다. 해당 프로젝트 터미널에서 $ pod init Pod 파일이 생성된다. pod 'CryptoSwift' 추가한 다음 파일을 저장하고 터미널로 나온 다음에 다음 명령으로 설치를 하자 $ pod install 그럼 해당 프로젝트 폴더에 확장자 .xcworkspace 가 생길 것이다. 이걸 클릭하여 프로젝트를 Xcode 에서 연다. 이제 프레임워크를 열 수 있다. import CryptoSwift 상단에 추가하면 이제 암호화 및 복호화를 할 수 있다. 암호와 복호화에 사용되는 키와 벡터가 있는데 이건 꼭 맞아야 하고 256비트로 하려면 32자 이어야 하고 128비트로 하려면 16자로 정해야 한다. 암호화 방법 do {   let aes = try AES(key: DEFINE_KEY, iv: DEFINE_IV)   let chiperText = try aes.encrypt("암호화할 문자열".bytes).toBase64() } catch { print(error) } 복호화 방법 do {   let aes = try AES(key: DEFINE_KEY, iv: DEFINE_IV)   let e64_data = Data(base64Encoded: chiperText) ?? Data()   let decryptData = try aes.decrypt(e64_data.bytes)   let decryptText = String(bytes: decryptData, encoding: .utf8) } catch { print(error) } 문자열을 찍어보니 암/복호화 잘 된다.

음악 플레이 하는 도중에 앱을 실행하면 중단되지 않도록 하는 방법 조치기

음악이나 라디오 또는 팟캐스트를 들으면서 교대근무 같은 앱을 실행하면 음악이 중단이 된다. 예전에는 아래 코드를 AppDelegate에 넣으면 중단되지 않고 내 앱에서 버튼 효과음까지 같이 실행되었었다. do {     try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)     try AVAudioSession.sharedInstance().setActive(true) } catch { print(error.localizedDescription) } 하지만 앱을 실행하면 중단이 될 뿐이었다. 각종 검색을 해보아도 위와 같은 코드만 나올 뿐이지 답은 없어 보였다. 이 때문에 xcode 도 제거하고 다시 설치 해보았다. 백그라운드 모드를 on 안 시켜서 그렇나? 역시나 마찬가지였다. 혹시나 하여 최근에 만들었던 다른 앱으로 구동해보았다. 음악이 중단되지 않고 버튼 효과음이 나올때 중단되는 것이다. 한줄기 희망을 보았다. 위의 코드를 메인뷰컨트롤러에 넣어 보았다. 역시나 중단이 된다. 혹시나 실행될때 위 코드로 실행을 했더니 중단이 되지 않는다. 각각의 효과음을 위 코드 블럭으로 싸고 실행하였다. 결과는 대성공이다. ㅋㅋㅋ guard let url = Bundle.main.url(forResource: "touch", withExtension: "mp3") else { return } do {     try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)     try AVAudioSession.sharedInstance().setActive(true)     let touchPlayer = try AVAudioPlayer(contentsOf: url...