http://rextester.com/

 

        private static string CRLF = "\r\n";
        private static string boundary = "----" + DateTime.Now.Ticks.ToString("x") + "----";
        private static Stream DataStream = new MemoryStream();
        private static byte[] formData;

        public static void APIExamCafePostMultipart(string tockenkey, string title, string memo, string imageurl)
        {
            DataStream = new MemoryStream();
            string token = tockenkey; // 네이버 로그인 접근 토큰
            string header = "Bearer " + token; // Bearer 다음에 공백 추가
            string clubid = cafeid; // 카페의 고유 ID값
            string menuid = menuID; // 메뉴ID값
            string headid = headID; // 말머리

            string url = "https://openapi.naver.com/v1/cafe/" + clubid + "/menu/" + menuid + "/articles";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "multipart/form-data; boundary=" + boundary;
            request.Headers.Add("X-Naver-Client-Id", clientID); // 등록한 어플리케이션 Client ID
            request.Headers.Add("X-Naver-Client-Secret", ScreatID); // 등록한 어플리케이션 Client Secret
            request.Headers.Add("Authorization", header);
            buildParam("subject", title); // 제목
            buildParam("content", memo); // 본문
            buildParam("headid", headid); // 말머리
            buildFileParam("image[0]", imageurl); // 파일 [0]
            //buildFileParam("image[1]", "C:\\test2.jpg"); // 파일 [1]
            buildByteParam(); // Byte Array 생성
            Stream stream = request.GetRequestStream();
            stream.Write(formData, 0, formData.Length); // request 전송
            stream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            string text = reader.ReadToEnd();
            stream.Close();
            response.Close();
            reader.Close();
            Console.WriteLine(text);
        }

 

SMSConvey 어플을 좀 업그레이드 하려고 하는데 갑자기 아래와 같은 에러가 났다.

Detected problems with app native libraries(please consult log for details): libmonosgen-64bit-2.0.so: unauthorized access to "/system/lib64/libsqlite.so"

오레오 업데이트 하고 나서 에러가 발생된것 같은데

찾아보니 7.0 부터 발생한 내용이라고 하던데.. 일단 내가 7.0 일때 테스트 할때는 저런 에러가 발생되지 않았다.

SQLite 사용시 발생되는 에러로 해결방법은

Nuget 패키지 관리자에서 "sqlite-net" 을 제거하고 "sqlite-net-pcl" 을 설치하면 된다.

 

**추가 (아래 방식으로 완전히 해결됨)

아래와 같이 package 를 설치하고

 

아래 두파일을 삭제합니다.

 

 

참고

https://forums.xamarin.com/discussion/78234/android-libmonosgen-library-sqlite-problems-with-app-native-libraries

앱상에서 권한을 준항목들이

오레오 버전 부터는 몇몇 특정 권한들이 권한이 빠지고 다시 사용자에게 권한허용을 받아야합니다.

만약 오레오 이전 버전에 잘 동작하던게 오레오 버전에서 동작하지 않는다면

권한으로 인해 먼가 동작하지 않는지 의심해 봐야합니다.

아래는 Xamarin.Android 에서 권한을 체크하고 권한이 없는 항목에 대해서

권한 허용을 요청하는 코드입니다.

(제가 문제가 되었던 권한는 android.permission.READ_SMS,  android.permission.WRITE_EXTERNAL_STORAGE,android.permission.SEND_SMS 입니다.)

// 권한이 없어 권한허용을 물어볼 항목들
List<string> permissions = new List<string>();

// 권한이 있는지 확인할 항목들
List<string> checkPermissions = new List<string>();
checkPermissions.Add(Manifest.Permission.AccessNetworkState);
checkPermissions.Add(Manifest.Permission.Internet);
checkPermissions.Add(Manifest.Permission.WriteSms);
checkPermissions.Add(Manifest.Permission.BroadcastSms);
checkPermissions.Add(Manifest.Permission.BroadcastWapPush);
checkPermissions.Add(Manifest.Permission.ReceiveBootCompleted);
checkPermissions.Add(Manifest.Permission.ReceiveMms);
checkPermissions.Add(Manifest.Permission.ReceiveSms);
checkPermissions.Add(Manifest.Permission.SendSms);
checkPermissions.Add(Manifest.Permission.WriteExternalStorage);
checkPermissions.Add(Manifest.Permission.ReadSms);

// 권한이 있는지 확인하고 없다면 체크할 목록에 추가합니다.
foreach (var checkPermission in checkPermissions)
{
    if (ContextCompat.CheckSelfPermission(this, checkPermission) != (int)Permission.Granted)
    {
        permissions.Add(checkPermission);
    }
}

// 권한없는 항목에 대해서 추가 허용을 할지 물어보는 팝업을 띄웁니다.
ActivityCompat.RequestPermissions(this, permissions.ToArray(), 1);

위 코드를 추가하면 앱 실행시 아래처럼 허용을 묻는 팝업이 뜹니다.

 

없던 권한이 3가지 인데 알아서 권한을 묶을수 있는것 들은 묶어서 팝업이 뜨는것 같네요

다시 말하지만 기존에 AndroidManifest.xml 에 권한이 포함되있더라도

오레오버전부터는 문제가 되는 권한들이 있으므로 위 작업이 필요합니다.

 

참고

https://developer.android.com/about/versions/oreo/android-8.0-changes?hl=ko

 

소스 코드는 아래 링크

https://drive.google.com/file/d/1erpdAnFz0e8H9DlT5zBURh4hYng1hzUr/view?usp=sharing

이미지를 분석하여 분석결과를 도출합니다.

 

1. Rect 를 선택하지 않으면 아랫쪽이 분석한 결과가 표시됨

 

2. Rect 를 선택하면 사각형이 그려지면서 분석된 내용이 표시됨.

분석가능한 사물은

aeroplane
bicycle
bird
boat
bottle
bus
car
cat
chair
cow
diningtable
dog
horse
motorbike
person
pottedplant
sheep
sofa
train
tvmonitor

실행화면

 

'C#.NET > C#' 카테고리의 다른 글

compile c# online  (0) 2018.10.01
[C#)네이버 카페 API 이용하여 사진 포함 글 등록하기  (0) 2018.09.26
[C#]TensorCamera  (0) 2018.09.01
DataGridView Row Number 채우기  (0) 2018.07.21
[링크]ProfessionalCSharp  (0) 2018.07.17
git hub(깃헙) username 변경하기  (0) 2018.07.04

심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태
오류  /Users/mac/Library/Caches/Xamarin/mtbs/builds/MiGong.iOS/c10cbd8fd317519d3dd23b704514d419/bin/iPhone/Release/MiGong.iOS.app: errSecInternalComponent MiGong.iOS   

위과 같은 오류가 발생

mac 이 잠자기 모드이거나 로그인 활성화가 풀린경우 발생된다.

mac 으로 들어가 로그인하면 위 오류는 사라진다.

error MT1006: Could not install the application '/Users/mac/Library/Caches/Xamarin/mtbs/builds/MiGong.iOS/c10cbd8fd317519d3dd23b704514d419/bin/iPhone/Debug/MiGong.iOS.app' on the device 'Jun의 iPhone': AMDeviceSecureInstallApplicationBundle returned: 0xe8000087 (kAMDIncorrectArchitectureError).    0 

프로젝트 속성의 iOS 빌드 탭에서 지원되는 아키텍처를 ARM7+ARM64 으로 변경하면 오류가 해결된다.

 

 

심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태
오류  Can't write [C:\Users\kjun\AppData\Local\Temp\tad3j0pm.d2m.jar] (Can't read [C:\Users\kjun\AppData\Local\Xamarin\Xamarin.GooglePlayServices.Base\25.0.0\embedded\classes.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [classes.jar:com/google/android/gms/common/annotation/KeepName.class])) MiGong.Android D:\[01]Source\KJunDev\MiGong\MiGong\MiGong.Android\CREATEMULTIDEXMAINDEXCLASSLIST  

갑자기 위와같은 에러가 발생되었다. nuget 패키지를 이것 저것 깔다 먼가 충돌이 발생해 지웠는데

저런 에러가.;;;

구글링 하니 이런 저런 방법이 있었는데 난 아래 처럼 하니 해결되었다.

도구>Android>Android SDK Manager 클릭

 

도구 탭에서 Google Play services 를 체크 해제하여 변경 내용 적용 을 하고

다시 체크하여 변경 내용 적용을 하여 재설치를 진행한다.

이러니 에러가 해결되었다.

 

아래 다른 방법.
https://forums.xamarin.com/discussion/55601/in-a-xamarin-android-project-how-can-i-remove-warnings-duplicate-zip-entry-classes-jar

네이버 아이디 로그인 후 아래와 같은 에러가 발생되었다.

디버그 모드에서는 발생안했던 에러가 릴리즈 모드에서 발생되었는데

원인은 인코딩 문제였다

 

Authentication Error e.Exception = Encoding 51949 data not be found...

 

iOS

Android

 

아래 그림과 같이 프로젝트 속성에서 인코딩에서 CJK 를 추가해야한다.

iOS (국제화)

Android (추가 지원 인코딩)

 

오류  Error loading '/Users/mac/Library/Caches/Xamarin/mtbs/builds/MiGong.iOS/c10cbd8fd317519d3dd23b704514d419/iTunesArtwork': Unknown image format. MiGong.iOS 

배포를 위해 빌드하는데 위와 같은 에러가 났다.

info.plist 의 iTunes 아트워크 부분의 이미지가 정상적이지 않아서 에러가 발생된다.

이미지를 크기를 맞춰 다시 넣어주면 정상적으로 동작한다.

근데 저게 머하는 놈이지;;;

+ Recent posts

티스토리 툴바