반응형

왼쪽,오른쪽의 2개의 div가 존재한다고 가정하였을때,

브라우저 창이 작아지면 width가 작아져 오른쪽 div가 아래로 내려가는 현상이 발생하는 경우가 생긴다.


나는 js로 width 사이즈를 동적으로 주고 있었기 때문에 js로 해결을 하려고한다.

$(function() {

    $(window).resize(function() {

        var width = $(this).width();

        var("#Right").width(width - $("#Left").width());

    });

}); 


반응형

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

[ERROR] jqplot 차트 이미지 출력 문제점  (0) 2017.12.07
브라우저 창 크기에 따른 변화  (0) 2017.08.08
특정 태그 제외  (0) 2017.06.14
javascript 에서 replaceAll  (0) 2015.10.23
반응형



간략하게 설명하자면, 클릭하였을 때 메뉴들이 보여지고 사라지는 스크립트다.

그러나 다른 곳을 클릭하였을 때, 사라지지 않고 새로운 메뉴가 또 다시 열린다.


 $("#one").click(function() {

    $("#service1").toggle();

    $("#service2").hide(); //클릭할 수 있는 곳이 많아지면 이부분이 늘어겠다.

});


$("#two").click(function() {

    $("#service2").toggle();

    $("#service1").hide();

});



$("#one").click(function() {

    $("#service1").toggle();

    $(".menu").not("#service1").hide();  //menu class의 service1 id를 제외하고 모두 숨겨라.

});


$("#two").click(function() {

    $("#service2").toggle();

    $(".menu").not("#service2").hide();  //menu class의 service2 id를 제외하고 모두 숨겨라.

});


참고로 toggl()e은 hide() 와 show()를 클릭할때마다 자동으로 변화하는 함수이다.

반응형

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

[ERROR] jqplot 차트 이미지 출력 문제점  (0) 2017.12.07
브라우저 창 크기에 따른 변화  (0) 2017.08.08
특정 태그 제외  (0) 2017.06.14
javascript 에서 replaceAll  (0) 2015.10.23
반응형

Xcode7 과 Xcode8 버전으로 작업을 하고 있다.

응용프로그램에 디폴트 Xcode를 8로 하고 Xcode 7을 다른 폴더에 넣어 두었다.


나의 소스의 차이점

Xcode7 

Xcode8 

SQLite Manual 사용 

SQLite CocoPods 사용 


그러나 Xcode7 에서 구버전 소스를 컴파일을 하려고 하였으나, 아래와 같은 에러가 메세지가 나왔다.

could not build objective-c module 'csqlite'

header 'stdatomic.h' not found  


기존에는 되었던 것이고, 소스 변경도 없었는데, 도저히 원인이 파악이 되지 않았다.

SQLite 도 Manual로 하였기에 소스도 예전 소스이다.


이것은 이렇게 하니, 해결 하였다.


응용프로그램 디폴트 Xcode를 7로 해보니 되더라


아무래도 Xcode와 연결된 모듈(lib파일등등) 들이 "Xcode"로 설정되어 있어서 그런 것 같다는.......그냥 나의 생각!


반응형
반응형

    override func viewDidLoad() {

        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: .UIApplicationWillEnterForeground, object: nil)

    }

    

    func willEnterForeground() {

        // do stuff

        print("complete TEST")

        

    } 


반응형
반응형

동일한 버튼을 클릭할 때마다 boolean 값을 바꿔주는 경우가 종종 있다.

이런 경우 아래와 같이 했었다.

var buttonValue = false

@IBAction func BoolButton(_ sender: UIButton) {

    if buttonValue == true {

        buttonValue = false

    } else {

        buttonValue = true

    }

}


이것을 단순하게 바꿔본다면...

var buttonValue = false

@IBAction func BoolButton(_ sender: UIButton) {

    buttonValue = !buttonValue


끝!

반응형

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

[ERROR] csqlite, stdatomic.h  (0) 2017.05.18
background to foreground  (0) 2017.04.27
버튼을 통한 Boolean  (0) 2017.04.17
xcode에서 시뮬레이터가 보이지 않을 때  (0) 2017.03.10
swift3.0 설정으로 가기  (0) 2017.02.17
alertMessage 왼쪽 정렬  (0) 2017.02.15
반응형


xcode 상단에 보면 종류별로 아이폰을 시뮬레이터를 할 수 있는 리스트가 나와 있다.

그러나 보이지 않을 경우가 있다.



이렇게 하면 해결 된다.


1. 어플명을 클릭하면 아래와 같이 메뉴가 나오고, Edit Scheme를 선택한다.



2. "Run" 의 Executable을 보면 None으로 되어 있을 것이다. 이부분을 선택하여, 해당 어플명을 골라주면 끝이다.



반응형

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

background to foreground  (0) 2017.04.27
버튼을 통한 Boolean  (0) 2017.04.17
xcode에서 시뮬레이터가 보이지 않을 때  (0) 2017.03.10
swift3.0 설정으로 가기  (0) 2017.02.17
alertMessage 왼쪽 정렬  (0) 2017.02.15
3D 터치 구현  (0) 2017.02.02
반응형

맥에서 html파일을 브라우저에 확인할 때 소스 자체가 보여질 때가 있다.

아래와 같이 설정을 바꿔보자.


텍스트편집기의 환경설정을 들어가보자.

포맷의 일반텍스트로 선택 하자.


파일 편집 후 저장할 때 확장자를 html로 붙힌 후 브라우저에서 실행하면 잘 보인다.



반응형
반응형

자바 제어판이 제대로 실행 되지 않을 때가 있다.

Java 제어판 다시 열기를 눌러도 무반응이다.

이건 버그라고 하는데.. 아래와 같이 하면 해결된다.

1. 설정에서 언어 및 지역 선택


2. 지역을 다른 나라로 임시 지정한다.


3. 다시 자바를 실행시키면 제어판이 나온다.

4. 여기서 다시 언어 및 지역에서 대한민국으로 다시 수정을 하면 제대로 실행이 된다.

반응형
반응형

http://stackoverflow.com/questions/28152526/how-do-i-open-phone-settings-when-a-button-is-clicked-ios


  • prefs:root=General&path=About
  • prefs:root=General&path=ACCESSIBILITY
  • prefs:root=AIRPLANE_MODE
  • prefs:root=General&path=AUTOLOCK
  • prefs:root=General&path=USAGE/CELLULAR_USAGE
  • prefs:root=Brightness
  • prefs:root=Bluetooth
  • prefs:root=General&path=DATE_AND_TIME
  • prefs:root=FACETIME
  • prefs:root=General
  • prefs:root=General&path=Keyboard
  • prefs:root=CASTLE
  • prefs:root=CASTLE&path=STORAGE_AND_BACKUP
  • prefs:root=General&path=INTERNATIONAL
  • prefs:root=LOCATION_SERVICES
  • prefs:root=ACCOUNT_SETTINGS
  • prefs:root=MUSIC
  • prefs:root=MUSIC&path=EQ
  • prefs:root=MUSIC&path=VolumeLimit
  • prefs:root=General&path=Network
  • prefs:root=NIKE_PLUS_IPOD
  • prefs:root=NOTES
  • prefs:root=NOTIFICATIONS_ID
  • prefs:root=Phone
  • prefs:root=Photos
  • prefs:root=General&path=ManagedConfigurationList
  • prefs:root=General&path=Reset
  • prefs:root=Sounds&path=Ringtone
  • prefs:root=Safari
  • prefs:root=General&path=Assistant
  • prefs:root=Sounds
  • prefs:root=General&path=SOFTWARE_UPDATE_LINK
  • prefs:root=STORE
  • prefs:root=TWITTER
  • prefs:root=FACEBOOK
  • prefs:root=General&path=USAGE prefs:root=VIDEO
  • prefs:root=General&path=Network/VPN
  • prefs:root=Wallpaper
  • prefs:root=WIFI
  • prefs:root=INTERNET_TETHERING
  • prefs:root=Phone&path=Blocked
  • prefs:root=DO_NOT_DISTURB


let settingsUrl = URL(string: "App-Prefs:root=General&path=Keyboard")

if let url = settingsUrl {

    UIApplication.shared.open(url, options: [:], completionHandler: nil)

} 


반응형

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

버튼을 통한 Boolean  (0) 2017.04.17
xcode에서 시뮬레이터가 보이지 않을 때  (0) 2017.03.10
swift3.0 설정으로 가기  (0) 2017.02.17
alertMessage 왼쪽 정렬  (0) 2017.02.15
3D 터치 구현  (0) 2017.02.02
Notification - FCM 설정(3) : 소스 및 테스트  (0) 2017.02.02
반응형
 - 변경 전

let alertController = UIAlertController(title: "삭제 하시겠습니까?", message: "사용자: \(username)"+"\n"+"휴대폰: \(phone)"+"\n"+"네이트온: \(nateon)", preferredStyle: .alert)

            

let submit = UIAlertAction(title: "Submit", style: UIAlertActionStyle.default, handler: { (paramAction:UIAlertAction) in

    if let status = self.ArrayUserName[indexPath.row].authstatus, let auth = self.ArrayUserName[indexPath.row].authvalue {

        self.ProcessData(flag: "delete", authvalue: auth, authstatus: status)

    }

        self.ArrayUserName.remove(at: indexPath.row)

        tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)

    })


    let cancel = UIAlertAction(title:"Cancel", style:UIAlertActionStyle.cancel, handler:nil)

            

    alertController.addAction(submit)

    alertController.addAction(cancel)

    self.present(alertController, animated: true, completion: nil)



 - 변경 후

let userMessage = "사용자: \(username)"+"\n"+"휴대폰: \(phone)"+"\n"+"네이트온: \(nateon)"

let alertController = UIAlertController(title: "삭제 하시겠습니까?", message: userMessage, preferredStyle: .alert)

            

let submit = UIAlertAction(title: "Submit", style: UIAlertActionStyle.default, handler: { (paramAction:UIAlertAction) in

    if let status = self.ArrayUserName[indexPath.row].authstatus, let auth = self.ArrayUserName[indexPath.row].authvalue {

        self.ProcessData(flag: "delete", authvalue: auth, authstatus: status)

    }

                

        self.ArrayUserName.remove(at: indexPath.row)

         tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)

     })

    let cancel = UIAlertAction(title:"Cancel", style:UIAlertActionStyle.cancel, handler:nil)

            

    let paragraphStyle = NSMutableParagraphStyle()

    paragraphStyle.alignment = NSTextAlignment.left

            

    let messageText = NSMutableAttributedString(

        string: userMessage,

        attributes: [

            NSParagraphStyleAttributeName: paragraphStyle,

            NSFontAttributeName: UIFont.systemFont(ofSize: 15.0)

         ]

    )

    alertController.setValue(messageText, forKey: "attributedMessage")        

    alertController.addAction(submit)

    alertController.addAction(cancel)

    self.present(alertController, animated: true, completion: nil) 


반응형
반응형

$ brew install wget --with-libressl 


$ wget -help

반응형
반응형

아래 유튜브 동영상을 보고 그대로 따라한 것을 내 나름대로 정리해 보았다.

https://www.youtube.com/watch?v=NO9E5KxixOw



위 그림으로 보자면,

테이블뷰 메인화면을 만들고 해당 셀을 클릭 했을 경우, 일반적으로 AddStuffViewController로 넘어가게 된다.

여기서 해당 셀을 클릭하지 않고, 강하게 누르고 있을 경우, 즉 3D터치를 하였을 경우 PreviewViewController로 보여지게 끔 하려는 것이 목적이다.


아래 소스의 색이 칠해져 있는 것은 3d터치와 연관된 소스이니, 이부분만 참고하면 될 듯 싶다.


 - MasterViewController.swift

import UIKit


class MasterViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    


    @IBOutlet weak var MenuTable: UITableView?

    var data = ["Awesome Stuff","Interesting Stuff","Cool Stuff"]

    

    var stuffType:String? = nil

    var quickActionString:String? = nil

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        

        

        MenuTable?.delegate = self

        MenuTable?.dataSource = self

        

        if traitCollection.forceTouchCapability == .available {

            registerForPreviewing(with: self, sourceView: MenuTable!)

        }

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return data.count

    }

    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

        cell.textLabel?.text = data[indexPath.row]

        

        return cell

    }

    

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        if let cell = MenuTable?.cellForRow(at: indexPath) {

            stuffType = cell.textLabel?.text

            self.performSegue(withIdentifier: "showStuff", sender: self)

        }

    }

    

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "showStuff" {

            let stuffVC = segue.destination as? AddStuffViewController

            stuffVC?.detailInfo = stuffType

        }

    }


} 


 - MasterViewController+UIViewControllerPreviewing.swift

   : 확장 클래스로 이 부분이 핵심이다.

import UIKit


extension MasterViewController: UIViewControllerPreviewingDelegate {


    // PEEK

    func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {

        

        guard let indexPath = MenuTable?.indexPathForRow(at: location),

            let cell = MenuTable?.cellForRow(at: indexPath) else {return nil}

        

        

        guard let previewVC = storyboard?.instantiateViewController(withIdentifier: "PreviewVC") as? PreviewViewController else {return nil}

        

        previewVC.selectedItem = data[indexPath.row]

        quickActionString = data[indexPath.row]

        

        previewVC.preferredContentSize = CGSize(width: 0, height: 150)

        

        previewingContext.sourceRect = cell.frame

        

        return previewVC

    }

    

    // POP

    func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {

        if let stuffVC = storyboard?.instantiateViewController(withIdentifier: "AddStuffVC") as? AddStuffViewController {

            stuffVC.detailInfo = quickActionString

            

            show(stuffVC, sender: self)

        }

    }

} 


 - PreviewViewController.swift

    : 3D 터치가 작동되었을 시 보여주는 형식이다.

    : 3D 터치 작동 중 화면을 위로 올렸을 경우, "Do something" 과 "Do even more " 메뉴가 나타나게 된다.

import UIKit


class PreviewViewController: UIViewController {


    var selectedItem: String? = nil

    var previewActions:[UIPreviewActionItem] {

        let item1 = UIPreviewAction(title: "Do something", style: .default) { (action:UIPreviewAction, vc:UIViewController) -> Void in

            print("Awesome")

        }

        

        let item2 = UIPreviewAction(title: "Do even more", style: .default) { (action:UIPreviewAction, vc:UIViewController) -> Void in

            print("cool")

        }

        

        return [item1,item2]

    }

    

    @IBOutlet weak var previewLabel: UILabel?

    

    override func viewDidLoad() {

        super.viewDidLoad()


        // Do any additional setup after loading the view.

    }


    override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(animated)

        previewLabel?.text = selectedItem

    }

    

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

} 


 - AddStruffViewController.swift

    : 일반적인 테이블뷰 값을 보여주는 것이라 본 내용과는 크게 중요하지 않다.



 - 3D 터치 프로젝트 파일

ThreeTouch.zip

반응형

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

swift3.0 설정으로 가기  (0) 2017.02.17
alertMessage 왼쪽 정렬  (0) 2017.02.15
3D 터치 구현  (0) 2017.02.02
Notification - FCM 설정(3) : 소스 및 테스트  (0) 2017.02.02
Notification - FCM 설정(2) : 선행 조건  (0) 2017.02.02
Notification - FCM 설정(1) : 참고 URL  (0) 2017.02.01
반응형

3. 소스 확인 및 테스트


 - 이제 거의 다 왔다.

 - firebase 에 나와 있는 소스는 swift3과 다른 부분이 있어서, 변경된 부분만 stackoverflow에서 참고하여 수정하였다.

(1) 앱에서 Firebase 초기화

(2) 소스

(3) 테스트 


(1) 앱에서 Firebase 초기화


   - AppDelegate.swift 파일에 추가



(2) 소스

 - AppDelegate.swift

import UIKit

import Firebase

import UserNotifications


@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {


    var window: UIWindow?

    let token = FIRInstanceID.instanceID().token()


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        // Override point for customization after application launch.

        

        FIRApp.configure()

        

        let center = UNUserNotificationCenter.current()

        center.delegate = self

        center.requestAuthorization(options: [.sound,.alert,.badge]) { (granted, error) in

            // Enable or disable features based on authorization

            

        }

        application.registerForRemoteNotifications()

        

        return true

    }


/*    

    func tokenRefreshNotification(notification: NSNotification) {

        if let refreshedToken = FIRInstanceID.instanceID().token() {

            print("InstanceID token: \(refreshedToken)")

        }

        

        // Connect to FCM since connection may have failed when attempted before having a token.

        connectToFcm()

    }

    

    func connectToFcm() {

        FIRMessaging.messaging().connect { (error) in

            if (error != nil) {

                print("Unable to connect with FCM. \(error)")

            } else {

                print("Connected to FCM.")

            }

        }

    }

    

    func application(_ application: UIApplication,

                     didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

        FIRInstanceID.instanceID().setAPNSToken(deviceToken as Data, type: FIRInstanceIDAPNSTokenType.sandbox)

    }

    

    private func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject],

                     fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

        // If you are receiving a notification message while your app is in the background,

        // this callback will not be fired till the user taps on the notification launching the application.

        // TODO: Handle data of notification

        

        // Print message ID.

        //print("Message ID: \(userInfo["gcm.message_id"]!)")

        

        // Print full message.

        print("%@", userInfo)

    }

*/ 

...

...

    func applicationDidEnterBackground(_ application: UIApplication) {

        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.

        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.

        

//        FIRMessaging.messaging().disconnect()

//        print("Disconnected from FCM.")

    }

...

...

}


(3) 테스트









반응형

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

alertMessage 왼쪽 정렬  (0) 2017.02.15
3D 터치 구현  (0) 2017.02.02
Notification - FCM 설정(3) : 소스 및 테스트  (0) 2017.02.02
Notification - FCM 설정(2) : 선행 조건  (0) 2017.02.02
Notification - FCM 설정(1) : 참고 URL  (0) 2017.02.01
swift3 Bool 기본값  (0) 2017.01.31
반응형

2. 선행 조건

  - 알림을 사용하기 위해서는 아래와 같이 초기 작업들이 필요하다.

(1) Firebase 추가

(2) CocoaPods 설치

(3) SSL 인증서 만들기

(4) 앱 ID 만들기

(5) 푸시 알림용 앱 ID 구성

(6) 프로비저닝 프로필 만들기

  - (1),(2) 평소해왔던 대로 하였기 때문에 무리가 없었으나,  (3)~(6) 은 처음 접해본 터라 조심스럽게 작업을 하게 되었다.



(1) Firebase 추가

   - https://console.firebase.google.com

   - 새 프로젝트를 추가 하거나, 기존 프로젝트를 사용한다.




  - 앱 내부 정보 입력 : 앱의 패키지명을 적어주고 앱 추가 버튼을 클릭.


 - 구성 파일 복사 : GoogleService-Info.plist를 다운 받은 후 Xcode 프로젝트에 등록을 시켜 준다.


 - 포드 설치, 초기화 코드 추가 : CocoaPods 설치 및 초기화 소스 안내이다. 이 부분은 뒤에서 간단히 다루도록 하겠다.

(2) CocoaPods 설치

 - 터미널에서 작업

$ pod init

$ vi Podfile  // 아래 Podfile 내용 입력

$ pod install 


 - Podfile

platform :ios, '9.0'


target 'Fcm' do

  use_frameworks!

    pod 'Firebase/Core'

    pod 'Firebase/Messaging'

end


(3) SSL 인증서 만들기


(4) 앱 ID 만들기

   - developer.apple.com 에서 개발자 로그인 후 Certificates, IDs & Profiles 클릭

   - Identifiers -> App IDs 에서 앱을 추가 해준다.

   - Push Notifications 를 체크해야 한다.


(5) 푸시 알림용 앱 ID 구성


   - 링크된 firebase의 설명은 자세하게 잘 되어 있다. 이 중 살짝 헷갈린 부분만 캡쳐해 놓았다.

(6) 프로비저닝 프로필 만들기

반응형

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

3D 터치 구현  (0) 2017.02.02
Notification - FCM 설정(3) : 소스 및 테스트  (0) 2017.02.02
Notification - FCM 설정(2) : 선행 조건  (0) 2017.02.02
Notification - FCM 설정(1) : 참고 URL  (0) 2017.02.01
swift3 Bool 기본값  (0) 2017.01.31
[ERROR] ITMS-90474  (0) 2017.01.27
반응형

클라이언트에 특정 메세지를 전달하고자 할 때, push 알림으로 메세지를 전송한다.

FCM(Firebase Cloud Messaging) 방식으로 설정하는 방법을 적어보고자 한다.


참고로 push 알림을 처음 테스트를 해보았다. 다소 부족한 부분도 있을 수 있다.

누락되거나 잘못 기재된 부분이 있어도 양해 바란다.

해당 글의 가독성을 높이기 위해 최대한 나눠서 작성을 하려고 한다.


 :::: INDEX

1. 참고 URL

  (1) firebase.google.com

  (2) swift3.0으로 변환 하고자 찾아본 소스 : stackoverflow.com


2. 선행 조건

   (1) Firebase 추가

   (2) CocoaPods 설치

   (3) SSL 인증서 만들기

   (4) 앱 ID 만들기

   (5) 푸시 알림용 앱 ID 구성

   (6) 프로비저닝 프로필 만들기


3. 소스 확인 및 테스트

   (1) 앱에서 Firebase 초기화

   (2) 소스 확인

   (3) 테스트


알림을 사용하기 위해서는 선행 작업이 필요한데,

웹페이지를 개발하기 위해 서버와 데이터베이스, 아파치 등을 셋팅한다고 생각해야 할 것 같다.

그러므로 선행작업은 신경을 써야 할 부분이 아닌가 생각한다.

developer.apple.com 의 Certificates, IDs & Profiles 에서 Notification 등록을 하는 작업이 의외로 까다롭다고 생각한다.

개인적으로 Certificates, IDs & Profiles 작업을 왠만해서는 안할려고 한다.(어렵다......인증서는 어렵다.)


1. 참고 URL

   (1) firebase.google.com

   - 설명이 자세하게 나와 있다. 모든 작업을 이것을 보고 하였기 때문에 참고 URL이라고 하기에는 좀 민망하다.

iOS에서 Firebase 클라우드 메시징 클라이언트 앱 설정

APN SSL 인증서 프로비저닝

iOS에서 Firebase 콘솔을 사용하여 주제 메시지 전송


   (2) swift3.0으로 변환 하고자 찾아본 소스 : stackoverflow.com

       - 여러가지를 보았지만, 가장 도움되었던 것만 추렸다.

UIUserNotification Type was deprecated in iOS10 Swift 3.0(stackoverflow)

Use of unresolved identifier 'FIRInstancelDAPNSTokenTypeSandbox'(stackoverflow)




반응형

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

Notification - FCM 설정(3) : 소스 및 테스트  (0) 2017.02.02
Notification - FCM 설정(2) : 선행 조건  (0) 2017.02.02
Notification - FCM 설정(1) : 참고 URL  (0) 2017.02.01
swift3 Bool 기본값  (0) 2017.01.31
[ERROR] ITMS-90474  (0) 2017.01.27
AVFoundation  (0) 2017.01.18
반응형

Safari -> 환경설정 -> 보안탭

"팝업 윈도우 차단" 체크박스를 해제하면 된다.

반응형
반응형

 * 아래 처럼 선언 하였을 때 기본값이 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
swift3 Bool 기본값  (0) 2017.01.31
[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
[ERROR] ITMS-90474  (0) 2017.01.27
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

반응형

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

swift3 Bool 기본값  (0) 2017.01.31
[ERROR] ITMS-90474  (0) 2017.01.27
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
[ERROR] Could not locate device support files.  (0) 2017.01.09
반응형

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] Cocoapods : Abort trap: 6  (0) 2017.01.13
[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] 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
swift3.0 2차 배열  (0) 2017.01.05
반응형

 1. Xcode 버전



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




3. 아이폰 버전




4. 결론

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

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




반응형
반응형

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는 웹페이지 부분에 등록되는 통계 데이터?


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

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

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

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


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

알려주십시요~ㅠㅠ



반응형
반응형

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



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

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


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

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


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

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

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

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


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

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


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

문제는 간단한 듯 하다.


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

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


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



반응형

+ Recent posts