728x90
반응형
728x90
반응형
728x90
반응형

2022년 모바일 현황

모바일 애플리케이션 비즈니스가 급성장하고 있습니다. 다운로드 횟수, 시간, 지출한 비용은 역대 가장 많은 수치를 보여줍니다. 정확히 말하면 2,300억 회의 다운로드, 3조 8000억 시간, 1,700억 달러를 소비했습니다. 더 많은 사람들이 더 많은 시간과 돈을 투자할수록 시장 출시 시간은 애플리케이션 개발자와 게시자에게 중요한 요소가 됩니다. 또한 선점한 자에게 큰 이점을 제공하는 더 많은 경쟁이 있습니다.

모바일은 이미 수년 동안 전 세계 대다수의 사람들이 디지털 콘텐츠를 소비하는 사실상의 장치였으며 활력이 고갈되지 않는 것 같습니다. 2019년 이후 세계 상위 10개 시장에서 일일 평균 사용량이 30% 증가했습니다. 사람들은 하루 평균 4.8시간을 기기 앞에서 보내며 총 3조 8000억 시간을 사용합니다. 10시간 중 7시간은 소셜 미디어, 커뮤니케이션, 사진 및 비디오 애플리케이션에 사용되었습니다.

2021년 최대 단일 승자는 틱톡(TikTok)으로 전년 대비 75% 성장했습니다. 다른 상위 5개 소셜 응용 프로그램은 메타 컴퍼니(Meta Company) 제품군에서 나온 것으로 꽤 놀라운 것입니다. 주로 이전 세대는 젊은 사용자(주로 Z세대)가 새로운 응용 프로그램을 시도할 의향이 있을 때 이미 알고 있는 응용 프로그램을 고수하고 있습니다. 이는 애플리케이션 퍼블리셔에게 새로운 시장 트렌드에 신속하게 대응하는 동시에 기존 사용자의 요구에 부응해야 한다는 압력을 가합니다. 개발 주기는 점점 더 빨라지고 있으며 사용자는 원하는 것을 얻지 못하면 발로 투표하고 있습니다.

모바일 우선 접근 방식 이라고도 하는 주요 개발 대상 플랫폼으로서의 모바일은 대부분의 애플리케이션 게시자에게 있어 주요 추세입니다. 퍼블리셔는 2021년에만 2백만 개 이상의 새로운 애플리케이션을 출시했습니다. Apple의 AppStore와 Google의 Play 스토어에 게시된 총 2,100만 개의 애플리케이션 수와 비교하면 그 숫자의 엄청난 양을 이해할 수 있습니다. 두 앱 스토어 모두 꾸준히 성장하고 있지만 Google은 전체 신규 릴리스의 77%로 우위를 점하고 있습니다.

사용자들은 또한 총 지출액이 1,700억 달러에 달했기 때문에 앱에 기꺼이 비용을 지불할 의향이 있었습니다. 233개의 앱이 1억 달러 이상의 매출을 올렸고 13개의 앱이 10억 달러 이상의 수익을 올렸습니다. 구독 및 인앱 구매가 가장 인기 있는 가격 모델이 되었지만 광고가 지배적인 수익 창출 모델입니다. 모바일 광고 지출은 2021년 2,590억 달러로 전년 대비 23% 성장했습니다. 사용자 및 광고 지출 증가는 게시자에게 희소식입니다. 게시자는 대상 사용자 그룹에 따라 자신의 작업으로 수익을 창출하고 여러 수익 모델을 활용할 수 있습니다. 그들이 제 시간에 시장에 도착하는 한…

모바일 애플리케이션 시장은 2021년에 좋은 한 해를 보냈고 2022년에도 정체될 기미가 없습니다. 마침내 글로벌 팬데믹이 진정되는 것 같고 긍정적인 신호가 많이 있습니다. 애플리케이션 퍼블리셔가 성장 점유율을 확보하려면 출시 시간이 그 어느 때보다 중요합니다. 출시 시간을 단축하려면 더 빠른 반복, 더 긴밀한 피드백 루프 및 더 빠른 테스트가 필요합니다. 즉, 더 빠른 디자이너-개발자 워크플로. 여기에서 Qt는 모든 애플리케이션 개발자와 퍼블리셔가 변화를 만들고 성장의 일부를 얻을 수 있도록 도울 수 있습니다.

728x90
반응형
728x90
반응형

보안 권고(Security advisory) : QProcess

최근 Qt Project의 보안팀은 QProcess와 관련된 문제를 인지하고 Unix 기반 플랫폼에서만 발생하는 보안 문제로 판단했습니다. 우리는 이것이 트리거될 가능성이 최소이기 때문에 애플리케이션에 상당한 위험이 있다고 생각하지 않습니다.

특히, 문제는 QProcess를 사용하여 절대 경로 없이 응용 프로그램을 시작하는 데 있으며, 결과적으로 PATH 환경 변수에서 찾는 것에 의존합니다. 결과적으로 공격자가 문제의 실행 파일 복사본을 QProcess의 작업/현재 디렉터리에 배치하고 대신 호출하도록 할 수 있습니다.

이 상황은 PATH 환경 변수가 문제의 실행 파일을 찾기 전에 먼저 해당 디렉토리를 검색하기 때문에, Windows에서 예상됩니다. 그러나 Unix 기반 플랫폼에서 PATH 환경 변수에서 찾을 수 없는 경우, 작업/현재 디렉토리를 검색하는 것은 정상이 아닙니다. 따라서 공격자가 동일한 이름의 악성 실행 파일을 거기에 배치할 수 있습니다.

절대 또는 상대 경로와 함께 QProcess를 사용하는 경우 이는 문제가 되지 않습니다. 구체적으로 다음과 같이 특별하게 호출하는 경우에 발생함:

QProcess p;
p.start( "application", args );

이것은 문제가 발생할 수 있습니다.

현재 지원되는 Qt 및 Qt 5.12 버전에 대한 패치는 여기에서 찾을 수 있습니다.

dev: https://codereview.qt-project.org/c/qt/qtbase/+/393113

Qt 6.2: https://codereview.qt-project.org/c/qt/qtbase/+/394914 또는 https://download.qt.io/official_releases/qt/6.2/CVE-2022-25255-qprocess6-2.diff

Qt 5.15: https://codereview.qt-project.org/c/qt/tqtc-qtbase/+/394919 또는 https://download.qt.io/official_releases/qt/5.15/CVE-2022-25255-qprocess5-15.diff

Qt 5.12: https://codereview.qt-project.org/c/qt/qtbase/+/396020

Qt를 패치하지 않으려면 QProcess 내부가 아닌 애플리케이션의 전체 경로를 확인하여 이 문제를 해결할 수 있습니다. 이 목적을 위해 QStandardPaths::findExecutable() 을 사용할 수 있습니다. 이렇게 하면 PATH 환경 변수를 검색하고 결과적으로 안전한 사용 경로를 제공할 수 있기 때문입니다.

이에 대한 공식 CVE 보고서는 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-25255 에서 찾을 수 있습니다.

728x90
반응형
728x90
반응형

Qt 상용 라이선스 간소화!

Qt Company는 제품 제공을 확장하기 위해 새로운 기능을 개발하고 신기술을 습득하는 데 막대한 투자를 했습니다. 시장의 피드백은 당사의 라이선스 제안, 조건 및 조건이 복잡하고 이해하기 어렵다는 것입니다. 따라서 우리는 상업적 제안을 합리화하고 단순화하고 있습니다. 우리의 주요 목표 중 하나는 "우리와 쉽게 거래할 수 있도록 하는 것"이며 이 블로그 게시물에 설명된 변경 사항을 통해 목표를 달성할 수 있을 것이라고 믿습니다.

다음은 변경하려는 주요 사항입니다.

  • 우리는 개발자 라이선스를 4개 에디션으로 간소화하고 통합하고 있습니다.
  • Qt Design Studio는 개발자 라이선스에 포함되어 별도로 제공됩니다.
  • 구독 라이선스가 있는 고객은 Qt 개발자 라이선스가 만료된 후 애플리케이션을 배포할 수 있습니다.
  • 우리의 품질 보증 도구는 이제 개발자 및 디자이너 도구와의 단일 Qt 라이선스 계약에 따라 적용됩니다.

기존 고객 라이선스 및 진행 중인 협상은 이러한 변경의 영향을 받지 않습니다. 새로운 포트폴리오와 라이선스는 2022년 2월 1일부터 제공됩니다.

개발자 오퍼링 통합

복잡성을 줄이기 위해 아래 표에 나와 있는 것처럼 개발자 제안을 4개의 기본 라이선스 버전으로 통합하고 있습니다. 더 높은 수준의 에디션일수록 더 많은 기능을 포함합니다. 각 에디션은 어니언(양파) 아키텍처 라이선스의 이전 에디션을 기반으로 합니다.

그림: 어니언 아키텍처에서 에디션을 제공하는 상용 개발자. 상위 수준 라이선스에는 '내부/하위' 계층의 기능이 포함됩니다.

별도의 라이선스로 판매되던 여러 애드온을 전체 제품에 통합하고 있는 것을 그림에서 볼 수 있습니다. 이러한 상용 애드온은 M2M(Machine-to-Machine) 프로토콜, 마이크로컨트롤러용 사용자 인터페이스를 개발하기 위한 라이브러리, 안전이 중요한 애플리케이션, 자동차 전용 목적 및 애플리케이션 관리를 위한 기능을 제공합니다.

이것이 나에게 어떤 영향을 줍니까?

'Qt for Application Development' 구독 라이선스 보유자는 'Qt for Application Development Enterprise' 라이선스 보유자로 전환됩니다. "Qt for Device Creation"의 구독 라이선스 보유자는 'Qt for Device Creation Professional' 라이선스 사용자로 전환됩니다. 위의 표에 나와 있는 것처럼 새 라이선스는 구독 라이선스 보유자에게 추가 비용 없이 추가 기능을 제공하고 개발자 제안을 크게 단순화합니다. 기존 라이선스는 라이선스 기간이 끝나면 자동 갱신을 통해 새 버전으로 자동 변환되며 많은 새로운 기능은 Qt 유지 관리 도구를 통해 즉시 사용할 수 있게 됩니다.

Qt Design Studio 라이선스 업데이트

곧 Qt Design Studio 3.0을 출시할 예정입니다. 상업용 라이선스는 두 가지 버전으로 제공됩니다.

  • Qt 디자인 스튜디오 프로페셔널
  • Qt 디자인 스튜디오 엔터프라이즈

Qt Design Studio Professional 라이선스는 사용자 인터페이스 디자인, 편집, 애니메이션 및 프로토타이핑을 위한 모든 도구와 3D도 제공합니다. 특징 및 기능은 타사 브리지 플러그인을 제외하고 Qt Design Studio 2.3의 기능과 일치합니다. 디자이너는 라이선스를 별도로 구입할 수 있으며 Qt Creator 6.0 이상 버전을 사용하는 개발자는 개발자 라이선스의 일부로 도구가 포함됩니다.

Qt Design Studio Enterprise는 테크니컬 아티스트와 사용자 인터페이스 디자이너를 위한 제품입니다. 이를 통해 Figma, Adobe XD 및 Sketch를 비롯한 주요 그래픽 디자인 도구에서 디자인을 가져오고 Maya, Modo, Blender에서 3D 요소를 가져올 수 있습니다. 올해에는 더 많은 부가 가치 기능을 도입하여 디자이너가 아름다운 사용자 인터페이스를 만들 수 있도록 할 것입니다.

고객 피드백을 기반으로 한 이용 약관 업데이트

귀하의 제품을 배포하기 위해 유효한 개발자 구독 라이선스가 있어야 한다는 요구 사항이 방해가 된다고 말씀해 주셨고 저희는 귀를 기울였습니다! Qt 라이선스에 대한 투자를 보호하기 위해 이 요구 사항을 제거하기로 결정했습니다.

이전에는 라이선스 계약에 따라 고객이 유효한 개발자 라이선스 없이 애플리케이션을 배포할 수 없었습니다. 이 조건은 보안 및 유지 관리 문제를 해결하고 제품을 업데이트할 수 있는 기능을 제공하기 위한 것입니다. 그러나 귀하의 피드백에 따라 오늘 발표된 Qt 라이선스 계약(버전 4.4) 에 따라 구매한 라이선스에 대해 이러한 제한이 해제 되었습니다. 더 이상 필요하지 않지만 The Qt Company는 보안 수정 및 소프트웨어 유지 관리를 위해 최소한 하나의 유효한 개발자 라이선스 구독을 유지하도록 강력히 권장합니다.

Qt 라이선스 계약 4.4에는 다른 변경 사항도 있습니다. Qt Company의 QA(품질 보증) 도구를 계약에 추가했습니다. QA 도구는 2021년 Froglogic 인수를 통해 Qt 포트폴리오에 추가한 제품입니다. Squish, Test Center 및 Coco는 이제 디자이너 및 개발자 라이선스와 함께 단일 라이선스 계약이 적용됩니다. 이 변경은 QA 도구의 조건이나 가격에 영향을 미치지 않지만 계약 구조를 더 단순하게 만듭니다.

또한 책임 기간을 구독 기간과 일치시켰습니다. 이전 버전의 라이선스 계약(버전 4.3.x 이하)에서 Qt 책임 기간은 구매한 라이선스 기간에 관계없이 12개월로 제한되었습니다. 이제 책임 기간은 구독 기간에 따릅니다.

계약을 체결한 기존 고객은 일방적으로 계약을 변경할 수 없으므로 새 계약의 혜택을 자동으로 받지 못합니다. 라이선스 계약 버전 4.4로의 업그레이드에 대해 논의하려면 계정 관리자 에게 문의하거나 연락을 요청 하십시오.

간소화된 포트폴리오 및 라이선스의 이점

Qt 고객은 라이선스 구조, 약관 및 조건에 대해 많은 피드백을 제공했습니다. 우리는 제품 제공을 단순화하고 통합하기 위해 많은 노력을 기울였습니다.

변경 사항을 통해 당사의 제안을 더 쉽게 이해하고 Qt Company와 비즈니스를 수행할 수 있습니다. 기존 고객은 더 적은 수의 다른 라이선스 유형으로 기능을 통합함으로써 이점을 얻을 수 있습니다.

단순화된 포트폴리오에 대한 자세한 내용은 www.qt.io/pricing 의 상용 라이선스에 대한 FAQ(자주 묻는 질문 ) www.qt.io/faq/overview 에 나와 있습니다. 그리고 질문이나 의견이 있으시면 아래로 연락주시거나 댓글을 남겨주세요!

728x90
반응형
728x90
반응형

그래픽 소프트웨어에서 디자인 내보내기 (Exporting Designs from Graphics Software)

Adobe Photoshop 및 GIMP와 같은 그래픽 소프트웨어에서 QML 파일로 디자인을 내보낼 수 있습니다.

어도비 포토샵(Adobe Photoshop)에서 QML로 내보내기

QML 에셋(asset) 내보내기를 사용하여 Adobe Photoshop에서 .ui.qml 파일로 디자인을 내보낼 수 있습니다. QML 에셋 내보내기 도구는 Photoshop 용 PNG EXPRESS 플러그인을 기반으로하는 템플릿을 제공합니다. 이를 통해 PSD 파일을 QML 형식으로 내보내 각 PSD 파일을 .ui.qml 파일로 변환할 수 있습니다. http://www.pngexpress.com/

생성된 문서의 파일 이름은 PSD 파일의 이름을 기반으로 합니다. 태그가 지정된 이미지 및 텍스트 객체는 절대 위치 지정과 함께 내보내집니다. 텍스트 개체는 글꼴 및 정렬 정보와 함께 내보내집니다.

자세한 내용은 QML 에셋 내보내기(QML Asset Exporter) 도구의 문서를 참조하십시오. https://github.com/Pelagicore/QmlAssetExporter

김프(Gimp)에서 QML로 내보내기

각 장면은 각 레이어에 대한 이미지 또는 텍스트 아이템이있는 단일 QML 파일로 변환되어 개발 PC에 저장됩니다. 각 레이어는 아이템으로 내보내집니다.

편집을 위해 Qt Creator에서 QML 파일을 열 수 있습니다. 기본적으로 내보내기 스크립트는 Qt Quick 1 파일을 생성합니다. 디자인 모드에서 파일을 편집하려면 내보내기 스크립트에서 import 문을 변경하여 Qt Quick 2를 가져옵니다. 또는 파일을 생성 한 후 각 파일에서 import 문을 변경할 수 있습니다.

변환 규칙

다음 규칙이 전환에 적용됩니다.

  • 레이어(layer) 이름은 아이템 이름으로 사용됩니다. 공백과 해시 기호(#)는 밑줄 문자로 대체되어 아이템에 유효한 ID를 만듭니다.
  • 그림자(shadow)와 같은 레이어 스타일은 이미지로 변환됩니다.
  • 오프셋(offset), 크기(size), 순서(ordering) 및 불투명도(opacity)가 보존됩니다.
  • 텍스트 아이템은 이미지(Image) 아이템으로 변환되도록 지정하지 않는 한 텍스트(Text) 아이템으로 변환됩니다.
  • 숨겨진 레이어를 내보낼 수 있으며 표시 여부가 숨김으로 설정됩니다.
  • PNG 이미지가 이미지 하위 디렉토리에 복사됩니다.

변환할 파일 준비

사용하기 쉬운 QML 파일을 만들려면 다음과 같이 내보내기 용 김프 디자인을 준비하십시오.

  • 아이템 수를 최소화하려면 각 레이어를 텍스트 또는 이미지 아이템으로 내보내므로 레이어 수를 최소화하십시오.
  • 일부 레이어가 내보내지지 않았는지 확인하려면 해당 레이어를 숨기고 내보내는 동안 숨겨진 내보내기 확인란의 선택을 취소하십시오.
  • 레이어를 내보낸 후 레이어를 쉽게 찾으려면 설명이 포함된 이름을 사용하십시오.
  • 내보내는 동안 이미지 크기가 유지되는지 확인하려면 배경 레이어와 같이 완전히 숨겨져있는 레이어를 하나 이상 만드십시오. 내보내기 스크립트가 완전히 채워진 레이어를 찾지 못하면 모든 이미지를 캔바스의 크기로 조정합니다.
  • 내보내기 중에 오류를 방지하려면 레이어가 잠겨 있지 않은지 확인하십시오. 잠긴 레이어(locked layer)는 내보낼 수 없습니다.
  • 예상치 못한 결과를 피하려면 블렌딩 모드(Blending Mode) 효과를 사용하지 마십시오. 그들은 내보내지지 않습니다.

내보내기 스크립트 실행하기

이 스크립트는 김프 2에서 작동하도록 테스트되었습니다. 김프 2에서 김프 2를 다운로드 할 수 있습니다.

  1. Qt 코드 검토 에서 내보내기 스크립트 인 qmlexporter.py 가 들어있는 저장소를 복제하십시오. https://codereview.qt-project.org/#/admin/projects/qt-labs/gimp-qmlexporter 참고: 스크립트에 대한 최신 정보는 저장소의 INSTALL.txt를 읽으십시오.

  2. 내보내기 스크립트를 김프 설치 디렉토리의 플러그인 디렉토리에 복사하십시오.

  3. 파일의 속성을 검사하여 실행 파일인지 확인하십시오. Linux에서 다음 명령을 실행하십시오. chmod u+rx

  4. 디자인 모드에서 편집할 수 있는 QML 파일을 생성하려면 qmlexporter.py 에서 import 문을 편집하십시오. 예:

  f.write( 'import QtQuick 2.5 \n' )
  1. 김프를 다시 시작하여 내보내기 명령을 파일 메뉴에 추가하십시오.

  2. 파일 > QML 로 내보내기를 선택하여 디자인을 QML 파일로 내 보냅니다.

  3. 레이어를 QML 문서로 내보내기 대화 상자에서 QML 파일의 이름과 위치를 입력하고 내보내기를 클릭 합니다 .

QML 파일은 지정한 위치에 저장됩니다. Qt Creator에서 파일 > 파일 열기 또는 프로젝트를 선택하여 QML 파일을 엽니다.

참고: 기존 파일은 경고없이 대체됩니다.

728x90
반응형
728x90
반응형

Qt5Compat 라이브러리를 사용하여 Qt 5에서 Qt 6으로 포팅 (Porting from Qt 5 to Qt 6 using Qt5Compat library)

Qt 5에서 Qt 6으로 이식하는 것은 의도적으로 쉽게 설정되었습니다. 가능한 한 Qt 5와의 소스 호환성을 유지하기 위해 Qt 6 개발 과정에서 의도적인 노력이 있었습니다. 그래도 포팅에는 약간의 노력이 필요합니다. 이 짧은 게시물은 Qt 6으로 이식할 때 필요한 몇 가지 단계를 요약합니다.

Qt 5에서 일부 클래스는 이미 기존 대체품이 있었고 일부 클래스 는 Qt 6 개발 단계에서 후속 클래스를 얻었습니다. 따라서 이전 버전과 새 Qt 버전 모두로 코드를 컴파일 할 수 있는 것이 합리적일 수 있습니다. 이렇게 하면 코드가 어떤 버전으로도 컴파일되지 않는 작업량을 최소화 할 수 있으므로 애플리케이션이나 라이브러리가 Qt 5 및 Qt 6에서 계속 작동할 수 있습니다. 또 다른 이점은 기존 단위 테스트가 대부분의 경우 계속 작동한다는 것입니다. 이식 기간 및 코드 이식으로 인한 회귀(regression)는 Qt 6에 도입된 버그와 쉽게 구분됩니다.

타입 (Type)

아래 표에는 Qt 6에서 제거되었지만 이식의 용이성을 위해 Qt5Compat에 보관된 클래스가 나열되어 있습니다. 또한 Qt 6의 새 코드에서 대신 사용할 클래스도 포함합니다.

Qt 5 클래스 Qt 6 교체
QLinkedList std::list *
QRegExp QRegularExpression
QStringRef QStringView
QXmlSimpleReader QXmlStreamReader
QTextCodec QStringConverter
QTextEncoder QStringEncoder
QTextDecoder QStringDecoder
  • 링크드 리스트(linked list)의 참조(reference) 안정성이 필요하지 않은 경우 QList 사용도 고려할 수 있습니다.

빌드 시스템 선택

위에서 언급한 Qt 5 클래스를 계속 사용하려면 먼저 새 Qt5Compat 모듈에 연결하도록 빌드 시스템을 조정해야 합니다. 예를 들어 qmake 빌드 시스템 사용자는 다음 줄을 추가합니다.

  • .pro 파일 :
QT += core5compat

애플리케이션 또는 라이브러리를 cmake 빌드 시스템으로 포팅한 경우에는 다음을 추가하십시오

  • CMakeList.txt
PUBLIC_LIBRARIES
Qt::Core5Compat

include 수정 하기

분명히 필요한 빌드 시스템 변경 외에도 앞서 언급한 클래스의 include를 수정해야 할 수도 있습니다.

실제 코드는 다음과 같습니다.

#include <QtCore/QRegExp>

새 Qt5Compat 모듈에 대해 업데이트 합니다.

#include <QtCore5Compat/QRegExp>

또는 훨씬 더 간단하고 휴대 가능한 버전을 사용하십시오.

#include <QRegExp>

Qt 6로의 기대

Qt 6이 다가 오면 이미 새로운 Qt 6 베타 버전 테스트를 고려할 수 있습니다. 또한 위에서 언급한 몇 가지 Qt Core 클래스 변경으로 인해 코드가 영향을 받는 경우 조기 테스트가 가능합니다. 발견할 수 있는 문제에 대해서는 bugreports.qt.io에 자세한 버그 보고서를 제출하십시오. 버그 보고서를 제출할 때 문제를 발견한 Qt 버전을 언급하고 중복 및 알려진 문제를 확인하십시오. Qt 프로젝트 메일링 리스트 및 개발자 포럼의 토론에 참여하는 것도 환영합니다.

번역자 추가

링크

예제

728x90
반응형
728x90
반응형

Qt 5 Core 호환성 API (Qt 5 Core Compatibility APIs)

Qt 5 Core Compat 모듈은 Qt 6에서 더 이상 지원되지 않고, Qt 6에서 제거된 Qt Core API가 포함되어 있습니다. 이 모듈은 Qt 6으로의 전환을 용이하게 하기 위해 제공됩니다.

모듈 사용

Qt 모듈을 사용하려면, 직접 또는 다른 종속성을 통해 모듈 라이브러리에 연결해야 합니다. CMake 및 qmake를 포함하여 여러 빌드 도구에 이를 위한 전용 지원이 있습니다.

CMake로 빌드하기

find_package() 명령을 사용하여 Qt6 패키지에서 필요한 모듈 구성 요소를 찾습니다.

find_package(Qt6 COMPONENTS Core5Compat REQUIRED)
target_link_libraries(mytarget PUBLIC Qt6::Core5Compat)

CMake로 빌드 개요도 참조하세요.

qmake로 빌드하기

qmake로 빌드하기 위한 모듈을 구성하려면 Qt 프로젝트의 .pro 파일에 있는 변수 값으로 모듈을 추가 합니다.

QT += core5compat

라이선스 및 귀속 (Licenses and Attributions)

Qt 5 Core Compat는 The Qt Company의 상업용 라이선스 에 따라 사용할 수 있습니다. 또한 무료 소프트웨어 라이선스 (GNU Lesser General Public License, version 3 또는 GNU General Public License, version 2) 에 따라 사용할 수 있습니다. 자세한 내용은 Qt 라이선스를 참조 하십시오.

또한 Qt 6.0.0의 Qt 5 Core Compat에는 다음같이 허용되는 라이선스에 따라 타사 모듈이 포함되어 있습니다.

모듈 라이선스
Text Codec: EUC-JP BSD 2-clause "Simplified" License
Text Codec: EUC-KR BSD 2-clause "Simplified" License
Text Codec: GBK BSD 2-clause "Simplified" License
Text Codec: ISO 2022-JP (JIS) BSD 2-clause "Simplified" License
Text Codec: Shift-JIS BSD 2-clause "Simplified" License
Text Codec: TSCII BSD 2-clause "Simplified" License
Text Codecs: Big5, Big5-HKSCS BSD 2-clause "Simplified" License
728x90
반응형
728x90
반응형

QUIP 12 | Qt 커뮤니티 행동 강령 (QUIP 12 | The Qt Community Code of Conduct)

다음 텍스트는 사용 가능한 KDE 커뮤니티 행동 강령에서 수정되었습니다.

전문 (Preamble)

Qt 커뮤니티에서 전 세계 참가자들이 모여 자유 소프트웨어를 만듭니다. 이는 Qt 기고자 및 사용자의 지원, 노력 및 열정에 의해 가능합니다.

이 문서는 Qt 프로젝트 참여자가 긍정적이고 고무적인 분위기에서 효과적으로 협력 할 수 있도록 몇 가지 지침을 제공합니다. 우리가 함께 어떻게 서로를 강화하고 지원할 수 있는지 설명합니다.

이 행동 강령은 Qt 프로젝트 및 커뮤니티 서비스에 참여하는 모든 기고자와 사용자가 공유합니다.

개요 (Overview)

이 행동 강령은 우리 공동체의 공유 된 가치와 "상식"사고에 대한 요약을 제공합니다. 우리의 프로젝트를 함께 유지하는 기본적인 사회적 요소는 다음과 같습니다.

  • 배려해 주세요
  • 존중해 주세요
  • 협동해 주세요
  • 실용적이 됩시다
  • 커뮤니티에서 다른 사람들을 지원해 주세요

Qt 프로젝트에 참여하는 사람들은 다양한 방식으로 참여합니다. 대부분 다음 역할 중 하나 이상에서 수행합니다.

  • 기고자는 Qt 소프트웨어 및 서비스 개선을 통해 프로젝트에 가치를 더합니다.
  • 사용자는 Qt 소프트웨어 소비자로서의 지원을 통해 프로젝트에 가치를 더합니다.

이 행동 강령은 Qt 프로젝트와 그 서비스의 맥락에서 모든 포럼, 메일 링리스트, 위키, 웹 사이트, IRC 채널, 공개 회의 또는 비공개 서신에서 Qt 커뮤니티 회원의 합의 된 행동 표준을 반영합니다. 커뮤니티는 본 행동 강령에 명시된 표준에 따라 행동하며 커뮤니티의 이익을 위해 이러한 표준을 방어합니다. 메일 그룹 중재자, IRC 채널, 포럼 등과 같은 그룹의 리더는 공유 행동 강령을 지속적으로 위반하는 사람에 대한 액세스를 중단 할 권리를 행사해야합니다.

배려해 주세요 (Be considerate)

당신의 행동과 작업은 다른 사람들에게 영향을 미치면서 사용될 것이며, 당신은 다른 사람들의 작업과 행동에 의존할 것입니다. 모든 결정은 다른 커뮤니티 회원에게 영향을 미칩니다. 이러한 결과를 고려해야 합니다.

기고자로서 타인의 작업에 대해 전적으로 크레딧을 제공하고, 귀하의 기여가 다른 사람에게 미치는 영향을 명심하십시오. 또한 개발 일정 및 지침을 따르려고 합시다.

사용자는 기고자가 Qt에서 열심히 일하고 큰 자부심을 가지고 있음을 기억하십시오. 당신이 좌절하는 경우, 분별을 유지해야 합니다. 모든 관련자에게 정확하고 잘 관리된 정보를 제공할 수 있으면 문제가 해결될 가능성이 높습니다.

존중해 주세요 (Be respectful)

Qt 커뮤니티가 건강성을 유지하려면 구성원이 편안하고 수용 적이어야 합니다. 이를 위해서는 서로를 존중하는 것이 절대적으로 필요합니다. 의견이 맞지 않을 때는 이전 사람들에게도 어떤 의미가 있다고 생각합시다.

우리는 개인적인 공격, 인종 차별, 성 차별 또는 다른 형태의 차별을 용납하지 않습니다. 의견 차이는 불가피하지만, 다른 사람들의 견해에 대한 존중은 당신 자신의 견해에 대한 존중을 얻는데 큰 도움이 될 것입니다. 다른 사람들이 좋은 의도로 행동한다고 ​​가정해 봅시다. 그들과 그들의 작업과 공헌을 존중한다는 것을 보여 줍니다. 이것은 지역 사회 구성원들이 편안하고 안전하다고 느끼게 합니다. 그 결과 동기 부여와 생산성이 향상됩니다.

우리는 다른 기고자, 사용자 및 커뮤니티를 다룰 때 커뮤니티 회원이 존중 받기를 기대합니다. Qt는 국제적인 프로젝트이며 다른 문화의 중요한 측면을 알지 못할 수도 있습니다.

협력해 주세요 (Be collaborative)

자유 소프트웨어 운동은 협업에 달려 있습니다. 그것은 생산되는 소프트웨어의 품질을 향상시키면서 노력의 중복을 제한하는 것을 돕습니다. 오해를 피하기 위해 도움을 요청할 때 명확하고 간결합시다. 이메일은 오해하기 쉽습니다 (특히 모국어로 작성되지 않은 경우). 어떤 의미인지 확실하지 않은 경우 설명을 요청하십시오. 첫 번째 규칙을 기억하십시오 - 사람들이 좋은 뜻으로 생각한다고 가정하십시오.

기고자로서, 귀하는 다른 커뮤니티 회원뿐만 아니라 귀하가 하는 일에 관심이 있거나, 의존하는 다른 커뮤니티와 협력하는 것을 목표로 해야 합니다. 작업은 투명하고 가능한 빨리 커뮤니티에 제출해야 합니다. 이는 다음 Qt 릴리스 이전의 작업에서 작업을 검토하고 공동 작업할 시간을 제공함으로써 커뮤니티를 돕습니다. 기존 프로젝트에서 새로운 작업을 하려면 아이디어와 진행 상황을 해당 프로젝트에 알리십시오.

아이디어 구현에 대한 합의에 도달하지 못할 수도 있으므로 시작하기 전에 이를 달성할 의무가 없다고 생각하십시오. 그러나 항상 외부 세계에 업무에 대한 정보를 제공하십시오. 커뮤니티가 귀하의 노력을 테스트하고 토론하며 기여할 수있는 방식으로 게시하십시오. Qt에 기여하기 위한 추가 지침은 하단에 나와 있습니다.

사용자에게는 피드백이 양식과 마찬가지로 중요합니다. 잘못 생각한 의견은 다른 지역 사회 구성원의 고통과 동기를 유발할 수 있습니다. 반대로, 문제에 대한 신중한 논의는 긍정적 인 결과를 가져올 수 있습니다. 고무적인 단어는 놀라운 일이 될 수 있습니다.

실용적이 됩시다 (Be pragmatic)

Qt는 실용적인 커뮤니티입니다. 우리는 토론에서 마지막 단어를 갖는 것보다 실질적인 결과를 중요하게 생각합니다. 우리는 우리의 가치를 지지하며 사소한 문제에 대한 논쟁이 결과 달성에 방해가되지 않도록 합니다. 우리는 출처에 관계없이 제안과 웰컴 솔루션에 개방적입니다. 의심스러운 경우 이론적 장점은 있지만 아직 해결되지 않은 솔루션을 통해 작업을 수행하는 데 도움이 되는 솔루션을 지원하십시오. 작업을 완료하는데 도움이 되는 도구와 방법을 사용하십시오.

커뮤니티에서 다른 사람들을 지원해 주세요 (Support others in the community)

우리 공동체는 상호 존중, 협력 및 실용적이고 책임감있는 행동으로 강해집니다. 때로는 이러한 표준을 지키고 다른 지역 사회 구성원이 도움을 필요로하는 상황이 있습니다.

다른 사람이 공격을 받는 것을 목격했다면 먼저 어떻게 그들에게 개인적인 지원을 제공할 수 있는지 생각해보십시오. 상황이 개인을 도울 수 있는 능력을 넘어선다고 생각되면, 피해자에게 개인적으로 가서 공식적인 개입이 필요한지 물어보십시오. 마찬가지로 업무 관련 스트레스 나 개인적인 문제로 인해 화상의 위험이있는 사람을 지원해야합니다.

문제가 발생할 때 다음 단계로 행동 강령에 관련된 사람들에게 상기시켜주십시오. 리더는 자신의 행동으로 정의되며, 행동 ​​강령이 정신적으로 확대되기 전에 문제를 해결하기 위해 노력함으로써 좋은 모범을 보일 수 있습니다.

커뮤니티의 다른 사람들로부터 지원을 받으세요 (Get support from others in the community)

정치적, 기술적 불일치는 항상 발생합니다. 우리 커뮤니티도 예외가 아닙니다. 목표는 의견 충돌이나 의견 차이를 피하는 것이 아니라 건설적으로 해결하는 것입니다. 조언을 구하고 의견 불일치를 해결하려면 가능하면 가장 직접 관련된 팀에 문의하여 지역 사회에 문의해야합니다.

의견 불일치를 공개 분쟁으로 만들기 전에 깊이 생각하십시오. 필요한 경우 덜 감정적 인 매체에서 차이점을 시도하고 해결하도록 조정을 요청하십시오. 당신이나 당신의 일이 공격을 받고 있다고 생각되면, 격렬한 답장을 쓰기 전에 숨을 쉴 시간을 가지십시오. 감정적인 언어를 사용하는 경우 24시간 모라토리엄을 고려하십시오. 쿨 타임이 필요한 경우도 있습니다. 기술적 문제에 대한 의견 불일치가 있을 경우 세부 사항이 포함 된 실질적인 제안을 게시하면 실질적인 문제에 대한 토론에 집중하고 오해를 해소할 수 있습니다. 제안을 시도하고 테스트 할 수있는 경우 특히 그렇습니다.

날인 (Colophon)

이 문서는 Creative Commons Attribution-Share Alike 3.0 라이센스에 따라 라이센스가 부여됩니다.

이 문서의 저자는 KDE와 Qt 커뮤니티와 이러한 역동적 인 환경을 만들기 위해 노력했으며 이 문서의 개발에 대한 그들의 생각과 지혜를 제공한 사람들에게 감사를 표하고 싶습니다. 또한 Ubuntu 커뮤니티 및 행동 강령과 같은 자체 사례를 통해이 문서를 구성하는 데 도움이 된 다른 활기찬 커뮤니티에 감사의 말씀을 전합니다.

참고 (References)

728x90
반응형
728x90
반응형

https://forum.qt.io/category/59/korean

 

Korean

Qt discussions, questions and answers

forum.qt.io

  • Qt Company 에서 다국어 포럼을 운영 중입니다. 그 중 한국어 포럼입니다.
728x90
반응형
728x90
반응형

Qt for Python을 위한 기술 비전 (Technical vision for 'Qt for Python')

이전의 Qt의 다음 주요 릴리스의 비전(vision)과 관련된 이전 게시물 이후, 우리는 Qt for Python 스토리를 설명하는 단락으로는 향후 릴리스(release)에 대해 고려한 모든 기능과 변경 사항을 공유하기에 충분하지 않다고 생각했습니다.

Qt 6 로의 전환

Qt와 같은 거대한 프레임워크를 다른 언어로 노출하는 것은 쉬운 일이 아니며 이것이 Qt 4의 이전 PySide 버전에서 Qt 5로 느리게 포팅된 주된 이유였습니다. 많은 개발자들의 시간이 새로운 Qt 5 API와 더 중요한 것은 모든 것이 올바르게 처리될 수 있도록 바인딩 생성기 도구(binding generator tool)에 적응하는 데 사용되었습니다.

Qt for Python의 개발이 Qt 6의 C++ 및 QML 스토리와 나란히 진행되고 있기 때문에 Qt 6에서는 상황이 달라집니다. 바라건대, 이번에는 놀랄 일이 거의 없을 것입니다. 실제로 이 효과는 현재 5.x 릴리스에서 볼 수 있으며 PySide2는 Qt 릴리스와 거의 동시에 사용 가능하며 경우에 따라 며칠 정도만 지연될 수 있습니다.

[역자주] PySide의 두 번째 버전(PySide2)를 'Qt for Python'이라는 제품명으로 부르고 있습니다. 두 가지 용어가 혼재되어 설명될 수 있습니다.

Qt 5.12.0의 공식 릴리스 이후 Qt for Python의 다운로드가 날마다 증가하고 있으며, 이는 커뮤니티가 프로젝트를 채택하고 즐기는 것을 의미합니다.

첫 번째 안정 버전 5.12.0 출시 이후 PyPi 다운로드

왜 Qt for Python을 개발하고 있습니까?

첫 번째 Qt 릴리스로 발전한 첫 번째 코드 줄은 90년대 초로 거슬러 올라갑니다. 이 코드는 파이썬 탄생과 거의 같은 날짜입니다. 두 프로젝트 모두 개발자의 삶을 편하게 하기 위한 생각으로 시작되었습니다. 두 프로젝트의 조합은 항상 좋은 아이디어였으며 PySide의 공식 출시 이후 Python 커뮤니티에 대한 Qt의 큰 발전을 보았습니다.

우리(Qt Company)는 스스로를 속일 수 없으며, python에 대한 다른 Qt 바인딩(binding) 세트 인 PyQt도 고려하지 않을 수 없었습니다. PySide가 시작된 이래 PyQt 코드와 소스 호환성을 유지하려고 노력했습니다. PyQt 사용자는 PySide도 지원하고 있으며 주요 차이점은 대부분 import name을 변경하고 있다고 주장합니다. 이와 같은 이유로 Qt for Python 프로젝트의 배후에 계신 분들께 정말 감사하고 있습니다. 두 바인딩 세트는 상당히 성숙하지만 한 단계 더 나아가고 싶습니다. 실제로 우리는 QVariant 및 다른 것들을 노출시키지 않는 것과 같은 일부 결정적인 결정을 내렸습니다.

현재 Qt for Python에 사용하는 두 가지 유형의 개발자를 위해 다음과 같은 주요 내용이 있습니다.

C++ 개발자

  • 빠른 프로토타이핑(prototyping) : 특정 프로젝트의 요구 사항을 고려하면 너무 많은 것을 설정하지 않고 아이디어를 프로토타이핑하는 빠른 방법을 사용하는 것이 정말 편리합니다. 종종 그들은 단지 하나의 pip install pyside2 호출입니다. 약간의 반복 후 응용 프로그램에 실제로 보다 성능이 뛰어난 동작이나 강력한 형식(strongly typed)의 언어가 필요한 경우 코드를 C++로 간단하게 전환할 수 있습니다.

PySide2로 예제 애플리케이션 작성

  • Python 내장(embedding) : Python 을 사용하거나 add-ons/plug-in 시스템을 통해 또는 응용 프로그램의 다른 측면을 조작하기 위해 내장된 인터프리터(interpreter)를 사용하여 기존 응용 프로그램을 확장할 수 있습니다.

텍스트 필드에 작성된 코드를 실행하는 Python 인터프리터가 내장되어 Qt/C++ 응용 프로그램 자체를 수정할 수 있는 Qt/C++ 응용 프로그램.

Python 개발자

  • GUI 개발을 위한 강력한 프레임 워크 : Python으로 그래픽 사용자 인터페이스를 작성하는 많은 옵션이 있지만 Qt는 멋진 GUI에 대한 대부분의 요구 사항을 충족하는 것으로 입증된 완전하고 강력한 프레임워크를 제공합니다. 우리는 다른 모듈을 추적하여 다음 릴리스에 포함시킬 수 있는 좋은 아이디어를 얻었습니다.

PySide2 설치 과정

  • 바인딩(binding) 생성 : 파이썬 모듈을 만드는 것은 어려운 작업일 수 있으며 현재 많은 프로젝트에서 이를 달성하기 위한 간단한 인터페이스를 제공하려고 합니다. Shiboken은 모든 C++ 프로젝트를 처리할 수 있는 힘을 점점 더 많이 얻고 있습니다. 많은 코스튬과 사용자의 경험으로 인해 이 도구는 기존 C++ 프로젝트에 Python 바인딩을 제공하기에 충분합니다. 예를 들어 Gamry Instruments가 이미 한 일을 참조하십시오.

Shiboken을 사용하여 예제“Hello World”모듈 만들기

Qt for Python의 미래

Python/Pyside2의 첫 공식 Qt 릴리스 이후 많은 아이디어를 모았습니다.

몇 가지 주요 사항은 다음과 같습니다.

  • 이름 붙이기(Naming) , 모듈의 버전 관리는 파이썬과 Qt가 독립적인 번호 매기기를 했으며, 이는 사용자에게 혼란을 주었습니다. 따라서 우리는 Qt 6부터 Qt 버전 관리를 따르기로 결정했습니다. 이름 자체 그대로 유지되는 PySide 6이 릴리스됩니다.

  • Python2 지원 , 2020년 초부터 Python2는 더 이상 유지 보수되지 않습니다. 우리는 동일한 작업을 수행하기로 결정했으며 PySide6가 릴리스되면 지원을 중단할 것입니다. 내부적으로 이것은 현재 Python2와 Python3을 동시에 처리하는 많은 문제를 해결합니다.

  • uic 및 rcc를위한 별도의 툴 세트를 갖는 툴링(tooling) 은 공식 툴의 모든 변경 사항을 추적하고 이를 변형으로 포팅해야 했기 때문에 의미가 없었습니다. 파이썬을 공식 도구에 통합하는 것이 더 나은 것 같습니다. PySide2 5.14부터는 파이썬 wrapper 대신 Qt의 uic과 rcc를 직접 사용할 수 있기를 바랍니다.

  • 메타 위젯과 유틸리티(Meta Widgets and utilities) 는 빠른 개발을 위해 파이썬 개발자의 삶을 편하게해 줄 유틸리티와 위젯 세트를 작성하려고 합니다. NumPy, Pandas 및 기타와 같은 모듈과의 즉각적인 통합도 우리의 우선 순위 목록에 있습니다.

  • Qt6에 포함될 모든 새로운 기능을 적용하는 Shiboken 이 우리의 주요 초점이 될 것입니다. 다행스럽게도 버그 수정 및 새로운 기능을 제출하는 더 많은 기여자(contributor)를 확보했습니다. 결과적으로 더 성숙한 시보켄(shiboken) 릴리스를 얻는 것은 시간 문제입니다.

JIRA(PYSIDE-904)에 대한 더 완전한 목록을 읽을 수 있습니다. Qt 6에서 사용할 수 있게 될 것입니다. (우리는 최선을 다할 것이며, ☺ 약속).

Qt for Python 커뮤니티에게 진심으로 감사드립니다. 현재 작업중인 대부분의 기능은 그 곳에서 비롯되었습니다. 이러한 점을 염두에 두고 IRC 채널 #qt-pyside 에서 귀하의 우려 사항과 아이디어를 알려 주시기 바랍니다. 우리는 여러분의 생각과 Qt for Python를 어떻게 개선할 수 있는지 듣고 싶습니다.

728x90
반응형
728x90
반응형

[Qt,Android] Google Play의 향후 요구 사항을 준수하는 방법

8월 1일부터 Google Play는 64비트 버전이 없는 새로운 애플리케이션이나 애플리케이션 업데이트를 더 이상 허용하지 않습니다 (물론 소스 코드가 전혀 없는 경우는 제외). Qt 사용자의 경우 64 비트 바이너리가 포함된 추가 APK를 빌드해야 합니다.

Qt는 5.12.0 이후 Qt는 Android 용 64 비트 바이너리를 출시했으므로 새로운 요구사항을 준수하는 것이 기술적으로 문제가 있지는 않습니다. 하지만 사용자와 논의한 후에 여러 사람이 한꺼번에 지원할 수 있는 앱을 Google Play에서 설정하는 방법에 대해 모든 사람이 정확히 알지 못합니다.

이러한 헬프 요청은 현재 새로운 Windows 워크스테이션을 설치하고 있다는 사실과 함께 일반적으로 Android 앱 개발을 위한 Qt를 볼 수 있는 절호의 기회였습니다. 이 블로그에서는 clean slate 로 시작하여 Android 에서 시작하는 방법과 Google Play 요구사항을 준수하는 앱을 게시하는 방법을 보여줍니다.

저는 다음과 같은 일들을 진행할 것 입니다:

  • 작업 환경을 확보하는 데 필요한 설치 단계를 안내하고,
  • 다중 아키텍처를 위한 애플리케이션 구축 프로세스를 설명하고,
  • 바이너리를 Google Play에 업로드하는 방법을 보여 드리겠습니다.

처음 몇 부분은 많은 사람들에게 친숙할 수 있습니다. 따라서 지루하고 기본 주제에 대해 듣고 싶다면 4 단계로 건너 뛸 수 있습니다

SDK 버전에 대한 참고 사항

안드로이드 SDK는 그 자체로 무겁게 개발되고 있으며, 종종 하위 호환이 안되기 때문에 Qt 와의 통합에 문제가 있습니다. SDK 의 변경 또는 회귀로 인해 발생하는 Qt의 비 호환성 문제에 대해 최대한 신속하게 대처할 수 있지만 일반적으로 경험할 수 있는 가장 좋은 버전의 Android 도구로 업그레이드하기 전에 기다려야합니다.

다른 플랫폼에도 몇 가지 문제가 있지만 우리가 보았던 대부분의 문제는 Windows 에서 발생했습니다. 따라서 윈도우즈를 호스트 시스템으로 사용한다면 환경을 설정하기 전에 알려진 좋은 버전이 있는지 확인하십시오.

현재 Qt 5.13.0과 함께 다음 도구의 사용을 권장합니다 :

  • Android 빌드 도구 버전 28
  • Android NDK r19
  • Java Development Kit 8

몇 가지 문제가 발생하면 알려진 문제 페이지 를 확인하여 업데이트 된 정보가 있는지 확인하십시오.

이제 모든 것을 올바른 버전으로 가져 오는 방법과 장소에 대한 세부 정보를 얻으십시오.

1 단계 : JDK 설치

안드로이드는 기본적으로 Java 기반 플랫폼이며 Qt 애플리케이션을 C++ 및 QML 로 작성할 수는 있지만 통합을 가능하게 하는 파일을 컴파일하려면 Java Development Kit 이 필요합니다.

Android SDK 관리자 도구(Manager tool)와 최신 버전의 Oracle JDK 간에는 호환이 잘 안되므로, Android 환경과 함께 최신 JDK 버전는 함께 사용할 수 없습니다. 이 문제를 해결하려면 Android 용 JDK 버전 8 을 다운로드하는 것이 좋습니다.

오라클의 공식 바이너리 또는 AdoptOpenJDK 프로젝트와 같은 대안을 사용할 수 있습니다.

설치 프로그램을 다운로드하여 실행하고 기본 위치에 설치하십시오.

2 단계 : Android 환경 설정

두 번째 단계는 실제 Android 개발 환경을 얻는 것입니다. Android Studio 를 다운로드하고 설치하면 됩니다. 다른 “beta” 및 “canary” 릴리스를 스크롤하면 최신 안정 릴리스가 제공됩니다.

Android Studio가 설치되면 이 도구를 사용하여 'SDK 플랫폼'을 설치할 수 있습니다. 이것은 특정 안드로이드 배포판을 위한 실제 Java 클래스 모음입니다. Android Studio 를 처음 시작하면 SDK 플랫폼을 설치하라는 메시지가 표시됩니다. 권장되는 기본값 인 SDK 29 의 최신 버전을 안전하게 사용할 수 있습니다.

SDK 외에도 NDK 도 설치해야합니다. 이것은 C++ 코드를 크로스 컴파일하여 Android 에서 실행하는 데 사용되는 개발 키트입니다. 위에서 언급했듯이 Android NDK r20 은 컴파일 오류를 일으키는 문제가 있으므로 최신 릴리스가 아닌 Android NDK r19c 를 사용합니다. 이 문제는 Qt 5.13.1 및 Qt 5.12.5에서 해결될 예정이므로 이를 사용하기 시작하면 Android NDK r20 으로 업그레이드 할 수 있습니다.

그리고 마지막 단계로 최신 버전이 아닌 Android 빌드 도구의 버전 28.0.3 을 사용하고 있는지 확인해야 합니다. 이 문제는 Windows 호스트에서만 발생합니다.

Android Studio의 시작 대화 상자에서 구성을 클릭한 다음 SDK 관리자 를 선택하십시오. SDK 도구 탭으로 이동하여 패키지 정보 표시가 선택되어 있는지 확인하십시오. Android 빌드 도구 에서 29.0.0 을 선택 취소하고 28.0.3 을 선택합니다.

그러면 작동하지 않는 버전의 빌드 도구가 설치 제거되고 이전 버전이 설치됩니다. Apply 을 클릭하여 프로세스를 시작하면 프로세스가 완료되면 작동하는 Android 환경이 설치됩니다.

3 단계 : Qt 설치

이 가이드에서는 Qt 5.13.0을 사용하게 될 것입니다. 아직 시작하지 않았다면 Qt 계정 에서 온라인 설치 프로그램을 다운로드하십시오.

설치 프로그램을 실행할 때 arm64-v8a 및 armv7a 대상 아키텍처를 선택해야 합니다. 이것은 각각 Android 디바이스에서 가장 일반적으로 사용되는 프로세서 인 ARM 계열 프로세서의 64 비트 및 32 비트 버전에 대한 기술 이름입니다.

  • 참고 : 이 예제에서는 특히 데모로 사용할 응용 프로그램이 포함되어 있으므로 Qt Purchasing 도 필요합니다. 같은 목록에서 선택할 수도 있습니다.

Qt 설치가 끝나면 Qt Creator 를 시작하고 Options 을 엽니다. 장치 아래에서 Android 탭을 선택하고 이전 단계에서 다른 패키지를 설치한 디렉토리를 선택하십시오.

모든 것이 올바르게 설정되면 Qt Creator 에 녹색 체크 표시가 나타나고 Qt 로 안드로이드 개발을 할 준비가 됩니다.

4 단계 : Qt Creator에서 프로젝트 설정하기

이 예제에서는 Qt Hangman 예제를 사용합니다. 이는 크로스 플랫폼 방식으로 인앱 구매를 구현하는 방법을 보여주기 위해 만든 작은 예입니다.

먼저 Qt Creator에서 예제를 엽니다. 시작 화면에서 수행할 수 있습니다. Qt Creator 가 열리면 Qt Creator가 이를 구축하기 위해 사용할 Qt 버전을 선택하도록 요청할 것입니다.

Qt의 64 비트와 32 비트 버전을 모두 선택하고 Configure Project를 클릭하십시오.

Google Play의 추가 요구사항을 준수하기 위해 32 비트 장치용 및 64 비트 장치용의 두 가지 APK 패키지를 만들고자 합니다. 우리는 이들 각각을 개별적으로 구성해야 합니다.

이 스크린 샷은 32 비트 빌드의 설정 예를 보여줍니다.

여기서 주목해야 할 중요한 사항은 다음과 같습니다:

  • 각 빌드마다 다른 섀도우 빌드 디렉토리를 사용하십시오.
  • 릴리스 구성을 선택했는지 확인하십시오.
  • 또한 패키지 서명 확인란을 선택하여 패키지에 서명해야 합니다. 그렇지 않으면 Google Play 스토어에서 패키지를 거부합니다.

빌드 디렉토리를 제외하고는 64 비트 빌드의 설정이 동일해야 합니다. 왼쪽에 있는 64 비트 키트를 선택하고 거기에서 동일한 조정을 하십시오.

5 단계 : manifest 준비

또한 두 패키지는 하나의 세부 사항을 제외하고는 동일한 AndroidManifest.xml 파일이 필요합니다.

두 버전의 버전 코드(version code)가 달라야 합니다.

버전 코드는 APK가 스토어의 기기에 설치될 때 버전 코드가 가장 높은 APK를 선택한다는 점을 명심하는 한 선택할 수 있는 거의 모든 항목이 될 수 있습니다.

Qt 사용자 Fabien Chéreau가 버그 보고서에서 언급한 바에 따르면, 일반적으로 64 비트 버전의 버전 코드를 32 비트 버전보다 높게 설정하게 하게 하느 것이 좋습니다. 그래서 두 버전을 모두 지원하는 장치가 64 비트 버전을 더 선호하도록 구성합니다.

Felix Barz가 같은 맥락에서 지적했듯이 프로젝트의 .pro 파일에서 이 작업을 자동화할 수 있습니다. 다음은 코드를 약간 수정한 것입니다.

defineReplace(droidVersionCode) {
        segments = $$split(1, ".")
        for (segment, segments): vCode = "$$first(vCode)$$format_number($$segment, width=3 zeropad)"
        contains(ANDROID_TARGET_ARCH, arm64-v8a): \
            suffix = 1
        else:contains(ANDROID_TARGET_ARCH, armeabi-v7a): \
            suffix = 0
        # add more cases as needed
        return($$first(vCode)$$first(suffix))
}

VERSION = 1.2.3
ANDROID_VERSION_NAME = $$VERSION
ANDROID_VERSION_CODE = $$droidVersionCode($$ANDROID_VERSION_NAME)

이 깔끔한 트릭(감사합니다, Felix!)은 응용 프로그램의 VERSION 을 정수로 변환하고 최하위 끝에 새로운 숫자를 추가하여 아키텍처를 나타냅니다. 예를 들어 버전 1.2.3의 경우, 버전 코드는 32 비트 패키지의 경우 0010020031 이고, 64 비트 패키지의 경우 0010020031 입니다.

프로젝트 설정에서 APK 빌드 아래의 버튼을 사용하여 AndroidManifest.xml 을 생성하면 이 버전 코드가 프로젝트에서 자동으로 선택됩니다. 이 작업을 완료하고 매니페스트를 편집하여 응용 프로그램의 패키지 이름과 제목을 얻으려면 패키지를 빌드해야 합니다. 먼저 두 키트 중 하나를 사용하여 빌드를 수행한 다음 다른 키트를 활성화하고 다시 빌드하십시오.

완료되면 두 개의 릴리스 가능한 APK 패키지(이전에 설정한 각 빌드 디렉토리에 하나씩)가 제공됩니다. 빌드 디렉토리와 관련하여 패키지는 android-build\build\outputs\apk\release 있습니다.

보다 효율적인 설정을 위해서는이 프로세스를 자동화하는 것이 좋습니다. Qt Creator에서 사용하는 모든 도구를 명령 줄에서 실행할 수 있기 때문에 이것은 또한 가능합니다. 자세한 정보는 androiddeployqt 문서 를보십시오.

6 단계 : Google Play에 애플리케이션 게시

Google Play 퍼블리싱 페이지(publishing page)는 자체적으로 문서화가 되어 있으며 이를 수행하는 방법에 대한 많은 훌륭한 가이드가 있으므로 양식을 작성하는 모든 단계를 수행하지 않겠습니다. 일반적으로 요청하는 모든 정보를 입력하고 필요한 이미지를 제공하며 왼쪽 사이드 바에있는 모든 체크 표시가 녹색인지 확인하십시오. 여기에 모든 종류의 컨텐츠를 추가 할 수 있으므로 시간을 투자하십시오. 결국에는 앱의 인기도에 영향을 미칩니다.

일단 완료되면 App Releases 에서 새 릴리스를 만들고 APK를 업로드 할 수 있습니다.

한 가지 유의할 점은 처음 Google Play에서 앱 서명 키를 관리하도록 허용할지 여부를 묻는 메시지가 표시됩니다.

지금은 이것을 선택 해제해야 합니다. 이 기능을 사용하려면 응용 프로그램이 새로운 "Android App Bundle" 형식이어야 합니다. 아직 Qt 에서 지원하지는 않지만 이를 지원하기 위해 노력하고 있습니다. 사실, KDAB의 Bogdan Vatra (Qt의 안드로이드 포트의 관리자이기도 함)는 이미 그러한 지원을 얻는데 있어 가장 큰 문제를 해결하는 패치 를 게시했습니다.

우리가 지원을 받으면 릴리즈 프로세스가 좀 더 편리해질 것입니다. AAB 형식을 사용하면 Google Play 에서 다양한 아키텍처를 위한 최적화된 APK를 생성하지만 지금은 이 자습서에서 설명한대로 여러 키트를 설정하고 여러 APK를 구축하여 수동으로 이 작업을 수행해야 합니다.

두 개의 APK가 릴리스로 업로드되면 다음과 같은 목록이 표시됩니다. 두 개의 개별 APK 패키지는 각각 단일 기본 플랫폼을 포함합니다. 각 항목을 확장하면 "차별화 APK 세부 정보"가 무엇인지 알 수 있습니다. 기기가 Google Play 스토어에서 APK를 다운로드 할 때 다른 기기를 선택하는데 사용되는 기준입니다. 이 경우 차별화된 세부 사항이 기본 플랫폼이어야합니다.

32 비트 및 64 비트 바이너리 모두를 사용하여 Google Play에서 Qt 애플리케이션을 생성하고 출시 할 수 있습니다. APK가 업로드되면 게시(Publish)를 클릭하고 Google Play에서 자동화된 마술을 기다릴 수 있습니다. 현재 매장에 32 비트 앱이 있는 경우 2021년 8월 이전에 64 비트 버전으로 업데이트 해야 합니다. 비 호환 앱이 더 이상 64 비트 버전으로 제공되지 않게됩 니다. 심지어 32 비트 바이너리를 지원하더라도.

728x90
반응형
728x90
반응형
728x90
반응형
728x90
반응형

QSLogLib

  • 홈페이지 : https://github.com/JayTwoLab/QSLogLib

  • QSLogLib는 SLogLib를 Qt로 이식한 로깅 라이브러리 입니다.

  • 향상된 장치와 기능으로 Qt로 포팅되었습니다.

노트

  • Cmake는 더 이상 지원하지 않습니다.
  • 크로스 플랫폼 지원을 위한 복잡한 코드 대신에 Qt를 사용합니다.
  • UDP 클라이언트 로거가 추가되었습니다.

예제

1️⃣ 설정 방법

  • 처음에 Qt 프로젝트 파일(*.pro)에 pri 파일을 추가합니다.
  • qmake

    # Define QSLogLib relative path. You can fix this directory
    #   QSLOG_PARENTPATH = ../../
    #   QSLOG_HEADERPATH = ../../QSLogLib/
    #   QSLOG_SOURCEPATH = ../../QSLogLib/
    include(../../QSLogLib/QSLogLib.pri)
    

2️⃣ 표준 출력/파일 로깅 예제

  • cpp

    #include <QtGlobal>
    #include <QCoreApplication>
    
    #include "QSLogLib/SLogLib.h"
    #include "QSLogLib/Devices/AbstractLoggingDevice.h"
    #include "QSLogLib/Devices/ConsoleLogger.h"
    #include "QSLogLib/Devices/FileLogger.h"
    #include "QSLogLib/Devices/UdpLogger.h"
    #include "QSLogLib/Formatters/AbstractFormatter.h"
    #include "QSLogLib/Formatters/DetailedFormatter.h"
    #include "QSLogLib/Formatters/ErrorFormatter.h"
    #include "QSLogLib/Formatters/InfoFormatter.h"
    #include "QSLogLib/Formatters/NullFormatter.h"
    
    int main(int argc, char *argv[])
    {
        QCoreApplication mainApp(argc, argv);
    
        using namespace QSLogLib;
    
        // 로깅 장치 추가 
        addLoggingDevice( new ConsoleLogger(new NullFormatter) ); // 콘솔(console) + 단순 로깅 형식(null format)
        addLoggingDevice( new FileLogger("foo.log", new DetailedFormatter) ); // 파일(file) + 자세한 로깅 형식(detailed format)
    
        // 콘솔과 파일 모두로 로그가 출력됨
        int a = 10;
        double b = 15.3;
        const char* c = "Success";
        SLOGLIB_LOG_MSG_INFO("a = " << a << " b = " << b);
        SLOGLIB_LOG_MSG_INFO(c);
    
        return 0;
    }
    

3️⃣ UDP 송신 예제

  • cpp

    int main(int argc, char *argv[])
    {
    	QCoreApplication mainApp(argc, argv);
    
    	using namespace QSLogLib;
    
    	std::string strDestAddress = "192.168.137.1";
    	unsigned short destPort = 5000;
    	addLoggingDevice(new UdpLogger(strDestAddress, destPort, new NullFormatter));
    
    	// UDP 패킷으로 로그를 송신
    	int a = 10;
    	double b = 15.3;
    	const char* c = "Success";
    	SLOGLIB_LOG_MSG_INFO("a = " << a << " b = " << b);
    	SLOGLIB_LOG_MSG_INFO(c);
    
    	return 0;
    }
    

테스트 환경

  • Qt 6.0.0 (MingW, Windows 64bit)
  • Qt 5.10.1 (MingW, Windows 32bit)
  • Qt 5.6.2 (Linux 64bit)

라이센스

  • QSLogLib는 MIT 라이센스입니다.
728x90
반응형

+ Recent posts