고양국제고

GGHS Time Table for Mobile 개발 시작

카루-R 2021. 11. 13. 18:00
반응형

환영합니다, Rolling Ress의 카루입니다.

노가다도 이런 노가다가 없네요. 제가 개발하던 고양국제고 시간표 프로그램, GGHS Time Table은 윈도우만 지원합니다. 그것도 UWP 앱이라 무조건 스토어에서만 내려받아야 해요. exe로 실행시킬 수 없습니다. 뭐, 그 덕에 배포와 업데이트가 깔끔하다는 장점이 있지만 (exe는 본인이 업데이트 안 하면 답이 없기에..) 여러모로 제약이 걸리는 것도 사실이죠. 그래서, 이번에는 최소한의 기능만 담아 모바일 앱으로 GTT를 다시 만들고자 했습니다.

안드로이드 앱을 개발하려면 정석적으로 Android Studio를 통해 Java / Kotlin으로 앱 개발을 하는 게 맞습니다. 그런데 저는 자바를 몰라요. 코틀린은 더더욱. 그래서 그냥 제가 늘 쓰던 XAML+C# 조합으로 개발할 겁니다. 이 말은 뭐냐? .NET으로 개발한다는 얘기죠. 정확히는 .Net Standard 2.0입니다. .NET 6도 가능하긴 한데... 일단은 안전빵. 괜히 문제 일으키기 싫어요. 몇 번 뒤통수를 맞은 전적이 있기에.

우리 셰어텍이들에게 물어봤더니 (셰어텍 애칭을 뭐라 하죠...셰둥이?) 보라색이 예쁘다고 하더군요. 오케이. 오늘부로 카루의 최애 색상은 보라색으로 결정. 정확히는 #DBC3F8입니다.

혹시나 감이 안 오신다면, 위 색상표를 참고해주세요. 왼쪽에 쭈르륵 뜬 색상 중 가장 위에 있는 색상이 #DBC3F8입니다. 약간 연보라인데 밝기가 낮은 듯한 그런 느낌. 이 색상은 윈도우용 GTT4 및 GTT for Mobile의 기반 색상이 됩니다.

 
 

윈도우용 GTT4에 비해 UI가 상당히 다르죠. 마우스를 사용해서 인터랙션하는 컴퓨터와는 다르게 작은 화면을 터치해서 조작하는 스마트폰의 특성상, 글씨들이 전체적으로 작아지고 버튼들은 더 커져야 합니다. 그래서 우선 시간표는 크기를 작게 조정하고, 과목 이름을 3글자 이상 넘기지 못하게 했어요. (심화영어 제외) 그렇지 않으면 글씨가 Wrap되어서 다음 줄로 넘어갑니다. 잘린다는 소리예요.

한편, 반을 선택하는 것도 크게 바뀌었죠. 가운데에 Frame 하나 두고, 그 양 옆에 Button을 두어 좌, 우 버튼을 클릭하면 반이 달라지게 만들었습니다. 그냥 대충 생각한 건데 꽤 디자인 잘 했다고 생각해요. 설정하지 않았을 때는 0부터 시작하고, 일단 한 번 버튼을 누르면 1~8까지로 선택이 제한됩니다. 1반에서는 왼쪽 버튼이 사라지고, 8반에서는 위 사진처럼 오른쪽 버튼이 사라지죠. 원래는 버튼이 양쪽으로 있습니니다.

콤보박스가 사라지고 RadioButton으로 대체되었습니다. 저 동글뱅이 선택지들, 저걸 RadioButton이라고 불러요. 구역별로 나누어 하나씩 선택할 수 있게 했습니다. 참고로 이것도 반에 따라서 선택지를 제한할 수도 있었는데, 굳이 구현하지 않았습니다. 그런 세세한 기능 만들 때가 아니에요. 지금은.

그리고, UWP랑은 달라서 페이지를 넘어가도 Constructor가 호출되지 않습니다. static 객체처럼 한 번만 호출하고 다시는 안 불러들이는 것 같더라고요. 그래서 설정값을 바로바로 적용할 수가 없었습니다. Time Table페이지 하단에 REFRESH 버튼을 넣어둔 것도 그 이유입니다. 설정을 변경했으면, REFRESH 버튼을 한 번 눌러줘야 반영됩니다. 이건 제가 좀 더 공부를 하다보면 자동으로 만들 수도 있겠죠.

한 가지 재미있는 점은, 코드가 기존 GTT에 비해 굉장히 간결해졌다는 점입니다. 물론 이건 제가 예외처리를 안 해서 그럴 수도 있고 (앱이 불안정할 수 있다는 뜻입니다) 그 사이 제 코딩 실력이 늘어서 이런저런 트릭이 가능해져서일 수도 있습니다. 특히 저 string.RawNameToCellName() 메서드는 장족의 발전이라고 할 수 있겠어요. 50줄에 가까운 코드를 단 4줄로 줄여버렸으니.

줌 링크 창도 변했습니다. 크게 세 가지 버튼을 제공합니다. iOS에서는 다르게 뜰 거예요. 아무튼, 이렇게 세 옵션 중 하나를 선택하면 해당하는 기능을 실행합니다. Show ZOOM info는 그냥 줌 아이디와 비번을 띄워주어 노트북에서 치고 들어갈 수 있게 해줍니다. Open 메뉴는 줌과 클래스룸을 열어주는데, 이걸 원래 각 앱에서 열리도록 하고 싶었지만 그럼 네이티브 SDK로 개발을 해야 하는 관계로... 그냥 아직은 비워둔 기능입니다. 곧 추가할 거예요.

폐쇄적인 UWP 환경에 비해 파일 입출력도 굉장히 쉬워졌습니다. 이게 이래도 되나 싶을 정도로. 특히 안드로이드에서 권한 관련 이야기가 많이 나와 걱정했는데, 그 정도 (공유 스토리지) 권한은 설치 시에 알아서 받더라고요. 개발자는 딱히 신경 쓸 필요 없습니다. 그냥 .Net Standard 2.0 라이브러리의 File 클래스를 편하게 누리면 됩니다. 한 가지 아쉬운 점은 async 메서드가 아니라는 거.

간결하게 GTT M이라는 이름으로 만들겠습니다. GTT for Mobile의 약자예요. 이렇게 하고 Package Signing을 끝내면 Sideload가 가능해집니다. apk 파일을 만들 수 있어요. 이제 이걸 배포하면 모든 안드로이드 폰에 설치가 가능합니다. Play 스토어에 올리면 편한데, 미성년자라 불가능해요.

참고로, 이렇게 앱을 .NET 기반으로 만들면 Cross-Platform 개발이 가능하기 때문에 iOST 앱도 이미 만들어둔 상태입니다. 그러나 배포가 안되죠. 제가 애플을 별로 달가워하지 않는 이유 중 하나인데, 처음 접근하는 사람이 들어가기 너무 힘들어요. 개발자 신청...을 하려면 개인 소유의 아이폰이 있어야 합니다. 중간에 명의 바뀌면 안 되고요. macOS 앱 만들려면 뭐가 필요하죠? 네, xcode요. 그럼 또 Mac이 있어야죠. 돈이... 어휴. 몰라요. 귀찮아. 복잡해.

반응형