아래는 주문 이력 화면 예시로 

CollectionView 에서 Header 가 있는 경우 처리하는 방법입니다.

        <CollectionView
                x:Name="historyCollectionView"
                Margin="5"
                SelectionMode="Single"
                EmptyView="주문이력이 없습니다."
                SelectionChanged="OnCollectionViewSelectionChanged" >
            <CollectionView.Header>
                <StackLayout>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="90" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="70" />
                            <ColumnDefinition Width="70" />
                        </Grid.ColumnDefinitions>
                        <Label Grid.Column="0" Text="주문일자" TextColor="Black" FontSize="15" VerticalTextAlignment="Center" HorizontalTextAlignment="Center"/>
                        <Label Grid.Column="1" Text="주문매장" TextColor="Black" FontSize="15" VerticalTextAlignment="Center" HorizontalTextAlignment="Center"/>
                        <Label Grid.Column="2" Text="주문상태" TextColor="Black" FontSize="15" VerticalTextAlignment="Center" HorizontalTextAlignment="Center"/>
                        <Label Grid.Column="3" Text="주문가격" TextColor="Black" FontSize="15" VerticalTextAlignment="Center" HorizontalTextAlignment="End"/>
                    </Grid>
                    <BoxView HeightRequest="1" HorizontalOptions="FillAndExpand" Color="Black"/>
                </StackLayout>
            </CollectionView.Header>
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="0,10,0,0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="90" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="70" />
                            <ColumnDefinition Width="70" />
                        </Grid.ColumnDefinitions>
                        <Label Grid.Column="0" Text="{Binding ORDER_DATE}" TextColor="Black" FontSize="12" VerticalTextAlignment="Center" HorizontalTextAlignment="Center"/>
                        <Label Grid.Column="1" Text="{Binding STORE_NAME}" TextColor="Black" FontSize="13" VerticalTextAlignment="Center" HorizontalTextAlignment="Center"/>
                        <Label Grid.Column="2" Text="{Binding ORDER_STATUS}" TextColor="Black" FontSize="12" VerticalTextAlignment="Center" HorizontalTextAlignment="Center"/>
                        <Label Grid.Column="3" Text="{Binding PRICE, StringFormat='{0:N0}'}" TextColor="#B32026" FontSize="15" VerticalTextAlignment="Center" HorizontalTextAlignment="End"/>
                    </Grid>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>

* EmptyView 는 항목이 없는 경우 중간에 Text 로 표시가 필요할 때 사용한다.

위 내용을 데이터를 체우면 아래 처럼 표시 된다.

 

 

 

애플 개발자 계정에 아이폰 기기를 등록하는 과정을 설명합니다.


1. 앱개발자 사이트 접속 (https://developer.apple.com/account/#/welcome) 하여 Certificates, Identifiers & Profiles 선택


2. 죄측메뉴 중 Devices 메뉴 선택후 우측의 파란바탕의 + 버튼 클릭


3. Device Name 을 입력하고 DeviceID(UDID) 입력

UDID 확인은 iTune 를 연결하여 확인하거나 아래 작성글을 참고해서 폰에서도 확인 가능

(https://kjcoder.tistory.com/985)


4. Register 버튼을 클릭


5. Done 버튼 클릭하여 등록 완료


* 여기 까지만 하면 맥과 폰을 연결해도 비쥬얼 스튜디오에서 목록이 나타나지 않는다.


6. 맥과 폰을 연결하여 iTune 를 실행하여 아래처럼 화면이 뜨면 신뢰 클릭 (폰에서도 신뢰 선택)


7. 비쥬얼 스튜디오에서 기기 목록이 뜨는지 확인


NavigationPage.SetHasNavigationBar(this, false);

NavigationPage  를 쓰면서 메인 페이지에서 백버튼 눌렀을 경우

DisplayAlert (종료확인창)을 띄우는 방법은 아래와 같다.


        protected override bool OnBackButtonPressed() 
        {
            if (Navigation.NavigationStack.LastOrDefault() == null)
            {
                Device.BeginInvokeOnMainThread(new Action(async () =>
                {
                    if (await DisplayAlert("종료확인", "종료하시겠습니까?", "네", "아니오"))
                    {
                        System.Diagnostics.Process.GetCurrentProcess().CloseMainWindow();
                    }
                }));
            }

            return true; 
        }


Navigation.NavigationStack 을 확인하여 메인 페이지 인지 확인한 후 Device.BeginInvokeOnMainThread 를 이용하여 await DisplayAlert 를 이용해 팝업 창을 띄우고 종료한다.

QrMemo 앱을 만들었다


아이폰

https://apps.apple.com/app/id1493547282


안드로이드

https://play.google.com/store/apps/details?id=kr.kjun.QrMemo


아들 책에 큐알코드로 유투브 동영상 링크가 있는데

가끔 다시 찾을때 책을 찾아 스캔해야하는 불편함에 만들게 되었다.


큐알코드 이외 바코드도 스캔이 가능하다.

또한 웹링크 저장용으로도 쓸수 있다.


좌측 우측 슬라이드를 통해 수정 및 삭제, 링크이동 및 공유가 가능하다.

  


스캔하기 버튼을 클릭하면 스캔화면이 나오고 영역안으로 바코드나 큐알코드 를 찍으면

  


저장 할껀지 링크이동을 할껀지 묻는다.

저장 시 필요한 그룹과 제목을 넣고 저장하면 된다.

  


처음 사용 시에는 그룹이 없기때문에 그룹을 추가해야한다.


그룹은 설정 버튼을 통해 편집이 가능하다.


그룹명과 제목으로 조회할 수 있다.



<application

    android:usesCleartextTraffic="true">

            ...

</application>```


android 의 AndroidManifest.xml 쪽에 android:usesCleartextTraffic="true" 항목을 추가해주면 된다.

예전에 빌드 했던 앱을 열어서 Nuget 을 모두 업데이트 했는데 

아래 처럼 에러가 발생되었다.



unable to get provider com.google.android.gms.ads.mobileadsinitprovider: java.lang.illegalstateexception


해결방법은 AndroidManifest.xml 파일에

아래처럼 AdMob 에서 할당된 앱의 고유 ID 를 넣으면 해결된다.


<application android:label="UnitConversion" android:icon="@drawable/module48">

    <meta-data

        android:name="com.google.android.gms.ads.APPLICATION_ID"

        android:value="ca-app-pub-4681470946279796~5708961527"/>

</application>


앱의 ID 는 AdMob 사이트에서 아래 처럼 확인 할 수 있다.


이전에는 저 항목이 없어도 광고 표시에 문제가 없었는데 버전업이 되면서 필수 항목으로 바뀐듯하다.



Visual Studio 를 이용해 ipa 파일을 생성하고 Application Loader 를 이용해 

ipa 파일을 업로드 하려는데... 아무리 찾아도 보이지 않아 확인해보니

xcode 11 버전 부터 Application Loader 를 지원하지 않는다고 한다..

(맥미니를 새로 구입하면서.. 이런상황이...)


1. 앱 암호를 생성해야한다.

https://appleid.apple.com/account/manage

위 사이트로 들어가 로그인하고 보안 섹션의 앱암호 에서 암호 생성을 하고 기억한다.

(참고로 암호는 내가 지정하는것이 아니라 내가 특정 단어를 입력하면 단어 기준으로 암호가 만들어진다.)


2. 터미널을 실행히야 엡을 업로드 한다.

유틸리티에서 터미널을 실행하고


아래 명령어를 실행한다.

(바탕화면에 ipa 파일이 있다는 가정이다.)

xcrun altool --upload-app --type ios --file "Desktop/kjun.iOS.ipa" --username "ios 계정(메일)" --password "앱암호"


아래처럼 업로드 완료



  1. 사파리 앱으로 http://get.udid.io/ 에 들어갑니다.

  2. 녹색 버튼인 "Tap to find UDID" 를 클릭하시면 "Get Your UDID" 프로파일이 다운로드 되고 설정에 들어가서 프로파일을 설치합니다. 설치하시면 자동으로 해당 사이트로 방문하며 UDID 정보가 나옵니다.


Xamarin Forms 의 Picker 에서 SelectedIndexChanged 이벤트를 걸어 놓으면

Android 는 확인 버튼을 클릭했을때 동작하는데

iOS 는 Done 을 선택하기전 값을 바꾸는 와중에 SelectedIndexChanged 이벤트가 발생했다.

이를 막고 Done 버튼을 클릭(선택완료 시) SelectedIndexChanged 이벤트를 타게 하려면 아래와 같이 코딩해야한다.

 

using Xamarin.Forms.PlatformConfiguration;

using Xamarin.Forms.PlatformConfiguration.iOSSpecific;

 

this.picker.On<iOS>().SetUpdateMode(UpdateMode.WhenFinished);

+ Recent posts