본문 바로가기

애플리케이션 개발

(30)
PC에서 애플리케이션 테스트 서버용으로 맥미니를 중고로 구매했다. 비록 연식은 좀 됐지만(Mid 2010), SSD랑 RAM을 보고 구매를 결정했다. 어차피 같은 용량의 휴대용 SSD도 비슷한 가격일 텐데, 이것은 무려 PC이다. 역시, 가장 먼저 Rotate 360이 PC에서 잘 동작하는지 확인해 보았다. 처음부터 끝까지 노트북으로만 개발을 하다 보니 해당 테스트를 하지 못했다. 그리고 애플 기기가 있는 매장에서 테스트를 해보려고 했는데, 매장에 전시되어있는 애플 제품은 앱스토어에서 애플리케이션 구매가 제한이 되어 있었다. 출시 전, 노트북으로 할 수 있는 테스트는 최대한 하려고 했지만, 역시 PC로도 해보고 싶었다. 불행인지 다행인지 2010년에 출시된 맥미니는 High Sierra까지 지원을 하기 때문에 OS에 따른 테스트도 ..
5-0. 하드웨어 파트 개발 계획 이제 앞에서 구현했던 통신들을 실제 단말기를 통해 동작시켜야 한다. (집은 점퍼선이나 부품들로 난장판이 되어가고 있다.. 쉽지 않은 시간이 될 것으로 예상이 된다..) 회로 설계를 한 뒤 납땜까지 진행을 하고 펌웨어를 수정해야 할지, 점퍼선으로 대충 끼워 놓고 펌웨어를 수정하나 뒤 마지막에 납땜을 할지를 많이 고민했다. 현재 부품들의 기능 테스트를 위해 대충 점퍼로 연결해 놓고, 여차저차 하려고 했는데, 이 방법이 더 복잡한 것 같다. 그래서, 부품에 대한 기능 테스트 정도만 하고 사용할 부품들의 배치나, 핀 할당 등을 하려고 한다. 부품 테스트할 것은 다음과 같다. 1. 리니어 액추에이터 세트(리니어 액추에이터, 모터 드라이버, 리미트 스위치) 창문을 여닫기 위해 사용한다. 리니어 액추에이터는 스텝 모..
4-1. Node MCU를 통해 Web Scraping해서 정보 가져오기 Node MCU를 통해 Web page의 HTML문을 받아오는 것은 지난 포스팅을 참고하면 될 것이다. (taeminator1.tistory.com/15?category=924221) 이제 받아온 HTML문에서 원하는 정보를 가져와 보자. Examples의 BasicHTTPClient에서 약간의 수정이 필요하다. 먼저, setup()에서 Node MCU에 내장되어 있는 LED Indicator pin을 출력 핀으로 할당해 주고, 초기 값을 0으로 세팅하였다. (0일 때, LED가 켜진다) 그다음, loop()를 수정해야 한다. Wep page를 기준으로 통신을 하기 때문에, Web page에 있는 check box의 상태를 담을 수 있는 buttonState를 boolean 배열로 선언하여 초기값은 fa..
2-2. iOS에서 Web Scraping해서 정보 가져오기 나의 목표는 iOS Application에서 HTML 문서를 읽어와 버튼의 상태를 읽고 그 상태를 iOS Application의 버튼에 띄워주는 것이다. 구체적으로 정리를 해보면, 다음과 같다. 1. Application이 시작할 때, HTML 문서 읽기 2. HTML 문서의 버튼 상태 저장하기 3. iOS Application의 컨트롤에 상태 나타내기 먼저 Application이 시작할 때, HTML 문서를 읽어주기 위하여 AppDelegate.swift파일에 클래스 변수로 url과 buttonState를 추가하고, application 함수를 수정해 주었다. url은 반복적으로 사용되므로 ConentView 클래스에 있던 것은 제거를 하고 AppDelegate 클래스에서 한 번만 선언하기로 했다.(t..
2-1. iOS 앱에서 JavaScript 함수 실행하기 먼저 구현에 앞서 URL을 통해 웹페이지를 연결해야 하므로 Info.plist를 설정해준다. (taeminator1.tistory.com/11 참고) ContentView에서 앱과 웹페이지를 연결하기 위해, WKWebView와 URLRequest의 객체를 생성한다. 그리고 init() 함수를 추가해, 앱과 웹페이지를 연결한다. ContentView.swift import SwiftUI import WebKit import Foundation struct ContentView: View { static let url: String = "http://taeminator1.iptime.org" static let wkWebView = WKWebView() static let request: URLRequest..
2-0. 아이폰 앱과 웹 페이지 간의 통신 두 영역 간의 통신을 위해서는 두 가지가 구현되어야 한다. 1. 아이폰 앱에서 웹페이지의 정보 가져오기 2. 아이폰 앱에서 웹페이지의 컨트롤 조작하기 첫 번째, 아이폰 앱에서 웹페이지의 정보를 가져와야 한다. 처음 앱을 실행하면 이전에 내가 저장했던 상태들을 알아야 그것에 맞춰 앱을 띄울 수 있기 때문이다. 이에 관해서는 3-1(taeminator1.tistory.com/4)에서도 말했듯이, HTML문을 Scrap 해서 정보를 읽을 것이다. 두 번째로는 JavaScript파일을 아이폰 앱에서 실행시켜 웹페이지의 컨트롤을 조작할 것이다. 예를 들어 앱에 있는 버튼을 누를 시 웹페이지의 버튼을 누르게 할 것이다. WebKit Framework에서 제공하는 evaluateJavaScript함수를 이용할 것이다..
1-1. SwiftUI로 iOS Application UI 구성 기존에 Objective-C를 사용하던 애플은 2014년 WWDC(Worldwide Developers Conference)를 통해 Swift라는 언어를 세상에 처음 공개했고, 지난 2019 SwiftUI라는 새로운 User Interface를 공개했다. 기존 방식으로 애플리케이션을 제작하게 되면, 검증된 소스코드도 많고, 관련 자료도 많아 쉽게 애플리케이션을 만들 수 있을 것이다. 하지만 기술은 변화하고 있는데, 그 변화에 맞서기 싫어 기존 것을 고수한다면, 그리고 그것이 반복된다면, 가까운 미래에 크게 도태될 것이다. 그리고 이러한 태도가 개발자로서는 가장 기피해야 할 태도가 아닐까 싶다. 이런저런 의미에서 이번 개발은 SwiftUI를 통해 구현하기로 마음 먹었다. 사실 애플리케이션 제작 경험조차 별..
3-4. Node.js를 이용한 웹 페이지 작성(파일 read/write 구현) 2 이전 포스팅에서 개별적으로 살펴본 코드를 합친 전체 코드이다. 전역 변수로 fs모듈을 불러왔고, 공유기에서 설정한 내부 포트 번호도 선언했다. 그리고 HTML 코드가 너무 복잡해서 templageHTML함수를 통해 조금이나마 코드를 보기 쉽게 만들었다. app.js var http = require('http'); var fs = require('fs'); var url = require('url'); var qs = require('querystring'); const inPort = 80; // 내부 포트 번호 function templateHTML(title, gui, script) { return ` ${gui} `; } var app = http.createServer(function(reque..