대규모 문파전과 대규모 레이드 시스템! 하드코어PK(아이템드랍) 이것이 진짜 MMORPG!

https://appfing.com/4128202

 

대규모 문파전과 대규모 레이드 시스템! 하드코어PK(아이템드랍) 이것이 진짜 MMORPG!

 

appfing.com

캠페인 소개

■모바일로 재구성된 원작의 감성■
[레이드] 전서버가 한곳에서 즐기는 진짜 레이드 시스템
[조작] 간편한 오토 시스템
[PVP] 필드PK, 복수, 도발 끝나지 않는 전투 시스템
[성장] 탈것 , 펫, 의상, 영웅 다양한 성장 시스템
[조합] 더욱 강력한 장비 제작
[오프라인] 쉬지않고 성장하는 오프라인 경험치 시스템
[사북쟁탈전] 미르의 꽃 사북성을 차지하는 문파가 진정한 지존!

마물침공, 현상금, 폭군도전 등… 쉴 틈 없이 진행되는 다양한 이벤트
날개, 장비, 보석 등 다양한 강화 시스템
지금 접속해서 느껴보세요!

[미르의전설2 리부트 공식카페]
미르의전설2 리부트의 다양한 정보와 이벤트를 가장 빠르게 받아보세요!
https://cafe.naver.com/m2re

https://appfing.com/5099179

 

세인트 세이야 : 각성

 

appfing.com

1. 고퀄리티의 그래픽
세인트의 일러스트부터 화려한 필살기까지 원작의 모든걸 뛰어넘다!
한층 더 UP▲된 고품격 세인트를 만나보세요!

2. 철저한 원작 세계관 구현
갤럭시안 워즈부터 명왕 하데스편까지 애니메이션을 다시보다!
3D 애니메이션으로 펼쳐지는 원작의 스토리를 감상하세요!

3. 퓨전액션, 각성필살기등 특수컨텐츠
세이야의 페가수스 유성권과 시류의 여산승룡패의 화려한 퓨전액션!
일곱번째 감각을 깨워 캐릭터 고유의 각성기를 배우세요!

4. 전략성이 강조된 세인트 조합구성
총 6명으로 구성되는 세인트 조합으로 갤럭시안 워즈를 점령하세요!
침묵, 재행동, 속도제어, 디스펠, 스턴 등 다양한 스킬을 활용하세요!

5. 더욱 강화된 커뮤니티 기능
던전별 최적화된 파티추적 시스템 및 다양한 길드컨텐츠
친구와 함께하거나 새로운 친구를 만들어 다양한 기능을 체험하세요!

 

 

사업개요

정보보호 기업(스타트업)의 성장을 위하여 비즈니스 진행시 발생하는 현실적인 문제에 대해 온ㆍ오프라인을 통한 멘토링을 지원해 드리는 사업입니다. 
 
☞ 창업 7년 이내 정보보호 스타트업(개인ㆍ법인 사업자)
 
☞ 온ㆍ오프라인 멘토링 지원

지원분야 및 대상

ㅇ 멘토링 신청자격
- 창업 7년 이내 정보보호 스타트업(개인ㆍ법인 사업자)
※ 정보보호 관련 비즈니스 모델 및 원천 기술을 보유한 기업에 한정

지원조건 및 내용

ㅇ 정보보호 기업 원스톱 멘토란?
- 정보보호 기업(스타트업)의 성장지원을 위해 비즈니스 진행시 발생하는 현실적인 문제에 대해 온ㆍ오프라인을 통해 조언하는 멘토 역할 수행 

 

ㅇ 멘토링 형식
- 오프라인 멘토링 : 멘토링은 기본적으로 대면상담이 원칙이며 기업과의 오프라인 만남을 통해 기업의 비즈니스 애로사항을 상담
- 온라인 멘토링 : 시간 및 공간의 제약으로 대면상담이 여의치 않을 경우 e-메일을 활용하여 원격으로 상담 진행

 

ㅇ 멘토링 주요내용
- 정보제공 : 정보보호 산업 분야 최신 동향, 국내외 보안기업의 주력사업 현황, 최신 정보보호 기술, 비즈니스 유의 사항 등
- 기술조언 : 최신 정보보호 기술 조언, R&D 방법 등
- 판로개척 : 정보보호 기술 수요 기업 연계를 통한 비즈니스 발굴
- 사업화지원 : 비즈니스 모델 평가 및 발굴, 사업화 방향성 제시
- 행정지원 : 특허, 회계, 법률, 노무, 인사, 마케팅, 홍보 등 기업의 비즈니스 진행 중 발생되는 각종 이슈 등에 대해 종합 상담 등

 

ㅇ 정보보호 기업 원스톱 멘토링 운영체계

정보보호 기업  스타트업

한국인터넷진흥원

원스톱 멘토

한국인터넷진흥원

이메일로 상담 문의

해당분야 전문가 연결

오프라인 상담실시

상담 내역 관리  사후 관리

 

신청방법 및 서류

ㅇ 신청 방법 : 이메일 접수
- E-mail : onestop@kisa.or.kr

 

ㅇ 신청 서류 : 신청서

가점우대제도

ㅇ 해당없음

주관기관 담당부서 및 담당자

주관기관담당부서전화번호홈페이지URL담당자명

한국인터넷진흥원 보안산업진흥팀
02-405-6442 http://www.kisa.or.kr/
하병욱

접수기관 담당부서 및 담당자

접수기관담당부서전화번호홈페이지URL담당자명

한국인터넷진흥원 보안산업진흥팀
02-405-6442 http://www.kisa.or.kr/
하병욱

기타사항

※ 자세한 사항은 한국인터넷진흥원(www.kisa.or.kr) → 알림마당 → 공지사항 참조(☞바로가기)

문의처

ㅇ 한국인터넷진흥원 보안산업진흥팀 하병욱(02-405-6442)

Behaviors let you add functionality to user interface controls without having to subclass them. Instead, the functionality is implemented in a behavior class and attached to the control as if it was part of the control itself. This article provides an introduction to behaviors.

Behaviors enable you to implement code that you would normally have to write as code-behind, because it directly interacts with the API of the control in such a way that it can be concisely attached to the control and packaged for reuse across more than one application. They can be used to provide a full range of functionality to controls, such as:

  • Adding an email validator to an Entry.
  • Creating a rating control using a tap gesture recognizer.
  • Controlling an animation.
  • Adding an effect to a control.

Behaviors also enable more advanced scenarios. In the context of commanding, behaviors are a useful approach for connecting a control to a command. In addition, they can be used to associate commands with controls that were not designed to interact with commands. For example, they can be used to invoke a command in response to an event firing.

Xamarin.Forms supports two different styles of behaviors:

  • Xamarin.Forms behaviors – classes that derive from the Behavior or Behavior<T> class, where T is the type of the control to which the behavior should apply. For more information about Xamarin.Forms behaviors, see Xamarin.Forms Behaviors and Reusable Behaviors.
  • Attached behaviors  static classes with one or more attached properties. For more information about attached behaviors, see Attached Behaviors.

This guide focuses on Xamarin.Forms behaviors because they are the preferred approach to behavior construction.

 

동작을 사용하면 서브클래스 없이도 사용자 인터페이스 컨트롤에 기능을 추가할 수 있습니다. 대신 기능은 동작 클래스에서 구현되고 컨트롤 자체의 일부였던 것처럼 컨트롤에 연결됩니다. 이 문서에서는 동작을 소개합니다.

동작을 사용하면 코드가 컨트롤에 간결하게 첨부되고 둘 이상의 애플리케이션에서 재사용하도록 패키지될 수 있도록 컨트롤의 API와 직접 상호 작용하기 때문에, 대개 코드 숨김으로 작성해야 하는 코드를 구현할 수 있습니다. 다음과 같은 컨트롤에 광범위한 기능을 제공하는 데 사용할 수 있습니다.

  • 이메일 유효성 검사기를 Entry에 추가합니다.
  • 탭 제스처 인식기를 사용하여 등급 컨트롤을 만듭니다.
  • 애니메이션을 제어합니다.
  • 컨트롤에 효과를 추가합니다.

또한 동작은 더 고급 시나리오를 사용하도록 설정합니다. 명령 컨텍스트에서 동작은 명령에 컨트롤을 연결하는 데 유용한 접근 방식입니다. 또한 동작은 명령과 상호 작용하도록 설계되지 않은 컨트롤과 명령을 연결하는 데 사용할 수 있습니다. 예를 들어, 발생하는 이벤트에 대한 응답에서 명령을 호출하는 데 사용할 수 있습니다.

Xamarin.Forms는 동작의 두 가지 다른 스타일을 지원합니다.

  • Xamarin.Forms 동작  Behavior 또는 Behavior<T> 클래스에서 파생된 클래스입니다. 여기서 T는 동작이 적용되어야 하는 컨트롤의 형식입니다. Xamarin.Forms 동작에 대한 자세한 내용은 Xamarin.Forms 동작  재사용 가능한 동작을 참조하세요.
  • 연결된 동작 – 첨부된 속성이 하나 이상 있는 static 클래스입니다. 연결된 동작에 대한 자세한 내용은 연결된 동작을 참조하세요.

이 가이드는 Xamarin.Forms 동작에 집중합니다. 이는 동작 구성에 선호되는 접근 방식이기 때문입니다.

안녕하세요. 이번에는 가성비 좋은 노트북으로 유명한 레노버 노트북과 한성컴퓨터 보스몬스터 노트북을 비교해볼게요. 비슷한 가격대의 노트북의 성능을 비교해보려고 해요.

전 개인적으로는 레노버 노트북이 더 저렴하다고 해도 A/S를 생각 했을때 국내 브랜드인 한성컴퓨터를 더 선호해요. 하지만 사람마다 판단하는 기준이 다르기 때문에 이번 포스팅에서는 가성비만 놓고 비교를 해봤어요.

참고로 레노버 온라인스토어에서 기존 할인 제품도 중복 할인이 되는 레노버 11월 할인코드를 배포 했어요.

만약 레노버 노트북,데스크탑등을 구매하실때 아래의 링크 클릭하셔서 레노버 11월 할인코드를 사용하면 추가로 5%더 할인이되니 필요하신분들에게 도움이 되었으면 좋겠어요.

◎ 레노버 11월 할인코드 조건

- 할인율: 중복 5% 할인 (레노버 사이트내에서 할인중인 제품에 중복으로 할인 적용)

- 할인코드 사용기간: 11/4 ~ 11/30

- 유의사항: 1) 악세사리 단독 구매 시 사용 불가,

2) 타 할인코드와 중복 적용 불가

- 레노버 11월 할인코드 : LPLNV1

https://app.ac/IE5zrMS33

 

한국레노버® 공식 사이트 | 노트북, 태블릿, 데스크탑, 데이터 센터

모두를 위한 더 스마트한 기술 모두를 위한 더 스마트한 기술 또 한 번의 혁신적인 기술 — 2019년 9월 5일 독일 베를린, IFA 2019를 향한 카운트 다운 #LenovoTechLife 또 한 번의 혁신적인 기술 — 2019년 9월 5일 독일 베를린, IFA 2019를 향한 카운트 다운 #LenovoTechLife 우리에 대해 알아보세요IFA 2019

www.lenovo.com

이제 비교를 해볼게요.

레노버 Ideapad S530 링크

https://app.ac/l3cxPuJ03

 

Ideapad S530 | 가볍고 뛰어난 기능의 33.8 cm (13.3형) 노트북 | Lenovo 코리아

디스플레이 33.8cm(13.3형)"FHD IPS LED Backlight AntiGlare 1920 x 1080

www.lenovo.com

한성컴퓨터 FH58 BossMonster value8500 링크

https://coupa.ng/bjCYRw

 

한성컴퓨터 FH58 BossMonster value8500 노트북 (i5-8500 39.62cm MX150)

COUPANG

www.coupang.com

위의 사진이 레노버 Ideapad S530이에요.

위의 사진은 한성컴퓨터 FH58 BossMonster value8500이에요.

 

가격은 만원 차이로 레노버 Ideapad S530이 더 저렴해요.

그리고 위의 레노버 11월 할인코드를 사용하면 추가로 할인도 받을 수 있다고 하니

실제 가격차이는 조금 더 생기긴 할 것 같아요.

하지만 레노버 11월 할인코드는 한시적이기 때문에

레노버 11월 할인코드 적용전 가격을 가지고 비교군을 선정 한 것이에요.

그럼 스펙을 확인해볼게요.

 

구분

레노버 Ideapad S530

한성컴퓨터 FH58 BossMonster value8500

CPU

I5-8625U

I5-8500

RAM

8GB

8GB

저장장치

SSD 512GB

SSD 240GB

RAM

8GB

8GB

그래픽카드

인텔UHD 그래픽620

Geforce MX150 GDDR5 2G

/ Intel UHD Graphics 630

운영체제

윈도우10 홈

없음(free dos)

먼저 CPU를 보면 레노버 노트북이 숫자가 더 높아서 좋은 것 같지만

https://technical.city/en/cpu/Core-i5-8500-vs-Core-i5-8265U

 

Core i5-8500 vs Core i5-8265U [in 15 benchmarks]

 

technical.city

위의 링크된 사이트에서 확인해보니 I5-8500이 더 좋은 성능을 보이고 있어요.

CPU는 한성컴퓨터의 보스몬스터가 더 좋은 것으로 보이네요.

램은 두모델다 8GB로 같고

저장장치는 레노버는 512GB, 한성은 240GB로 레노버의 모델이 더 좋은 것으로 보여지네요.

그래픽 카드는 레노버 노트북은 내장형만 있는 대신 한성컴퓨터 노트북은 외장 그래픽카드가 같이 있어요.

그래픽카드도 한성컴퓨터가 더 좋은 것으로 보이네요.

디스플레이는 레노버 Ideapad S530는 13.3인치,

한성컴퓨터 FH58 BossMonster value8500는 15.6인치로

한성컴퓨터의 디스플레이가 조금 더 크네요.

레노버 Ideapad S530는 휴대성이 좋게 나온 모델이고

한성컴퓨터 FH58 BossMonster value8500는 휴대성 보다는

성능에 조금 더 치중한 모델이다보니 디스플레이 차이가 있는 것으로 보이네요.

 

위에 사진이 레노버 아래사진이 한성컴퓨터 노트북이에요.

제품사진만 봐도 레노버 Ideapad S530 노트북은 얇고 휴대성에 중점을 둔 모델이고

한성컴퓨터 FH58 BossMonster value8500는 두껍고 성능에 중점을 둔 모델로 보이네요.

비교를 하다보니 가격보다는 둘다 휴대성에 치중한 모델이나 성능에 치중한 모델을 비교군으로 잡아서

포스팅을 했어야 하는데 라는 후회가 몰려오네요.

하지만 지금까지 작성한 것이 있으니 마무리는 해야 할 것 같아요.

레노버 Ideapad S530 노트북는 운영체제 윈도우10이 포함되어 있지만

한성컴퓨터 FH58 BossMonster value8500는 운영체제가 프리도스라고 되어 있어요.

즉, 윈도우는 구매해서 설치하셔야 되요.

기존에 윈도우10 FPP버전을 구매 한것이 있으면 그데로 사용하셔도 되지만 없다면 새로 구매하셔야 되요.

제가 보기에는 90만원이하 노트북에서 성능에 아무리 치중을 했다고는 하지만

최신게임을 돌리는 것은 무리가 있어요. 그래픽 카드가 추가로 장착되었다고는 해도

그 그래픽카드로는 역시....역부족이죠.

제가 브랜드 빼고서 구매를 한다면 문서,동영상,배터리사용시간 등을 고려했을때

레노버 Ideapad S530를 구매 하겠지만,

전.. 한성컴퓨터를 더 좋아하기때문에..브랜드까지 생각한다면

AS가 상대적으로 좋은 한성컴퓨터를 선택할 것같아요.

실제로도 집에 있는 노트북은 한성컴퓨터..일명 인민에어를 사용하고 있어요.

 

하지만 레노버 Ideapad S530의 180도 디스플레이가 접히는 건........부럽네요.

재충전시간도 빠르고...휴대성은 확실히 좋아요.

최종 선택은 이 글을 보신 분들의 판단이고, 노트북을 구매해서 용도가 다르다보니

딱히 어떤 것을 구매하시라는 조언을 하기는 무리가 있는 것 같아요.

(전 개인적으로 국산브랜드를 선호하긴 합니다.)

혹시 레노버를 잘 모르시는 분들이 있을 수 있으니 잠깐 소개해 드릴게요.

 

레노버 소개

레노버의 역사적인 출발은 30년 전 11명의 중국 엔지니어들의 손에서 비롯됩니다. 오늘날 160 여개 이상의 국가에서 진취적 사고를 가진 다양한 혁신 전문가들이 레노버와 함께하고 있으며, 갈수록 복잡한 글로벌 이슈들을 보다 편리하고 완벽하게 해결하는 세상을 만들어가기 위해 노력하고 있습니다.

레노버는 '기술'로 고객들의 경험을 재창조하고 혁신하는데 힘쓰고 있으며, 그 기술이 우리가 사는 이 세상에 어떻게 접목되고 긍정적인 반향을 불러일으킬 수 있는지 집중하고 있습니다. 우리는 이것을 인텔리전트 트랜스포메이션이라고 부릅니다. 우리는 확장 지능으로 인해 새롭게 출현한 기술로 인류 능력의 한계를 넓히고 있습니다.

430억 달러의 기록적인 수익과 수 백만명의 소비자 그리고 초 단위로 판매되는 제품들로 매 순간 새로운 역사를 만들어가고 있습니다.

레노버의 비전은 더 많은 사람들이 갖고 싶어하는 맞춤형 디바이스를 생산하고, 더 많은 사람들이 함께 하고 싶어하는 문화를 창조하며, 전세계적으로 그 우수성을 인정받는 신뢰 높은 기업으로 뿌리내리는 것입니다.

이러한 비전은 세계에서 가장 탁월한 맞춤형 IT 기업으로 나아가게 합니다. 우리는 다음과 같은 키워드와 함께 목표를 이뤄나갈 것입니다.

모두의 가치가 더해지고 모두가 누릴 수 있는 기업 문화

레노버만의 독특한 문화 We Are Lenovo는 레노버 기업정신의 기저를 이룹니다. 아시아 기업으로 모습을 드러냈으나 명실상부 글로벌 기업으로 발돋움했습니다. 레노버에 뿌리내린 '다양성'은 다르게 생각하고, 새로움을 꿈꾸며, 빠르게 성장할 수 있는 강력한 동력이 됩니다.

우리는 다르게 생각하고 행동합니다.

레노버는 최고를 향한 공동의 목표를 끊임없이 공유하며 상기합니다. 고객들을 대하거나 팀으로 함께 일할 때 그리고 지역 사회에 봉사하며 레노버만의 고유 기업 문화를 형성했습니다. 강한 차별성의 제품을 생산하고 우리의 문화와 경험을 대표하는 사람들이 함께하는 기업, 바로 레노버입니다.

"이 포스팅은 제휴마케팅이 포함된 광고로 일정 커미션을 지급 받을 수 있습니다."

#레노버노트북, #한성컴퓨터노트북, #보스몬스터, #IdeapadS530, #FH58BossMonstervalue8500, #100만원이하노트북, #90만원이하노트북, #가성비노트북, #가성비노트북추천, #레노버11월할인코드, #레노버11월할인쿠폰, #레노버할인코드, #레노버할인쿠폰, #lenovo11월할인코드, #lenovo11월할인쿠폰, #lenovo할인코드, #lenovo할인쿠폰, #lenovo쿠폰, #lenovo행사, #레노버행사, #인민에서, #인민에어, #휴대성좋은노트북, #저렴한노트북, #레노버온라인스토어할인코드, #한성컴퓨터, #한성컴퓨터보스몬스터, #한성컴퓨터fh58, #할인코드, #할인쿠폰

지금 엘룬엔 역대급 보상 쏟아지는 중♬ 다 퍼드리는 신규보상 받으시고 수월하게 시작해보세요!

https://play.google.com/store/apps/details?id=com.gamevil.es2.android.google.global.normal

 

지금 엘룬엔 역대급 보상 쏟아지는 중♬ 다 퍼드리는 신규보상 받으시고 수월하게 시작해보세요!

 

appfing.com

캠페인 소개

개성만점 히어로들과 함께 떠나는 유쾌한 차원 모험

차원 히어로즈 '엘룬(ELUNE)' 지금 다운로드!

큐트,섹시,시크에서 허당까지 다~ 되는 히어로들이 온다!

차원 히어로즈 '엘룬'과 떠나는 유쾌한 차원 모험 RPG

 

■ 200가지 중 내 스타일 하나쯤은 있겠지 

뭘 좋아할지 몰라서 다 준비해 봤어~

없는 것 빼고 다~ 있는 200여종의 개성만점 엘룬들로 나만의 팀을 만들어보자!

 

■ 눈이 즐거워서 더욱 재미있는 전투

모든 엘룬의 고유의 스킬 영상이 있어 보는 재미가 뿜뿜!

애니메이션을 보는 듯한 화려한 연출로 전투의 재미도 UP UP!

 

■ 보다 보면 빠져드는 통쾌한 스토리

사막지대, 마법 비공정에서 하늘섬까지~

일곱개의 다양한 차원을 넘나드는 엘룬만의 차원 초월 시나리오!

한국 일본 양국의 초호화 성우 캐스팅까지 더해진 명품 스토리를 즐겨보세요~

 

■ 꿀잼 보장 컨텐츠 끝판왕

스토리만 탄탄해? 컨텐츠도 빵빵하다!

막강한 보스를 공략하는 보스전, 끝날 때까지 계속되는 차원의 틈, 치열한 격전의 PVP-계승전!

게다가 제작, 별자리 강화, 리플레이 등등 풍성한 컨텐츠를 즐겨보세요~

 

[엘룬 공식 카페]

엘룬 최신 소식부터 다양한 꿀팁까지 알고 싶다면?

최강 소통왕 GM들이 기다리고 있는 공식 카페로!

http://cafe.naver.com/elunegamevil                                                                                                               https://youtu.be/XgRfAqvavOo                                                               

 

엘룬 공식카페 : 네이버 카페

유쾌한 수집형 RPG 엘룬의 공식 카페입니다.

cafe.naver.com

 

 

  • 2017. 03. 23.
  • 읽는 데 6분
     
    •  

Handling Platform Divergence & Features

Divergence isn’t just a ‘cross-platform’ problem; devices on the ‘same’ platform have different capabilities (especially the wide variety of Android devices that are available). The most obvious and basic is screen size, but other device attributes can vary and require an application to check for certain capabilities and behave differently based on their presence (or absence).

This means all applications need to deal with graceful degradation of functionality, or else present an unattractive, lowest-common-denominator feature set. Xamarin’s deep integration with the native SDKs of each platform allow applications to take advantage of platform-specific functionality, so it makes sense to design apps to use those features.

See the Platform Capabilities documentation for an overview of how the platforms differ in functionality.

Examples of Platform Divergence

Fundamental elements that exist across platforms

There are some characteristics of mobile applications that are universal. These are higher-level concepts that are generally true of all devices and can therefore form the basis of your application’s design:

  • Feature selection via tabs or menus
  • Lists of data and scrolling
  • Single views of data
  • Editing single views of data
  • Navigating back

When designing your high-level screen flow you can base a common user experience on these concepts.

Platform-specific attributes

In addition to the basic elements that exist on all platforms, you will need to address key platform differences in your design. You may need to consider (and write code specifically to handle) these differences:

  • Screen sizes – Some platforms (like iOS and earlier Windows Phone versions) have standardized screen sizes that are relatively simple to target. Android devices have a large variety of screen dimensions, which require more effort to support in your application.
  • Navigation metaphors – Differ across platforms (eg. hardware ‘back’ button, Panorama UI control) and within platforms (Android 2 and 4, iPhone vs iPad).
  • Keyboards – Some Android devices have physical keyboards while others only have a software keyboard. Code that detects when a soft-keyboard is obscuring part of the screen needs to be sensitive to these differences.
  • Touch and gestures – Operating system support for gesture recognition varies, especially in older versions of each operating system. Earlier versions of Android have very limited support for touch operations, meaning that supporting older devices may require separate code
  • Push notifications – There are different capabilities/implementations on each platform (eg. Live Tiles on Windows).

Device-specific features

Determine what the minimum features required for the application must be; or when decide what additional features to take advantage of on each platform. Code will be required to detect features and disable functionality or offer alternatives (eg. an alternative to geo-location could be to let the user type a location or choose from a map):

  • Camera – Functionality differs across devices: some devices don’t have a camera, others have both front- and rear-facing cameras. Some cameras are capable of video recording.
  • Geo-location & maps – Support for GPS or Wi-Fi location is not present on all devices. Apps also need to cater for the varying levels of accuracy that’s supported by each method.
  • Accelerometer, gyroscope and compass – These features are often found in only a selection of devices on each platform, so apps almost always need to provide a fallback when the hardware isn’t supported.
  • Twitter and Facebook – only ‘built-in’ on iOS5 and iOS6 respectively. On earlier versions and other platforms you will need to provide your own authentication functions and interface directly with each services’ API.
  • Near Field Communications (NFC) – Only on (some) Android phones (at time of writing).

Dealing with Platform Divergence

There are two different approaches to supporting multiple platforms from the same code-base, each with its own set of benefits and disadvantages.

  • Platform Abstraction – Business Façade pattern, provides a unified access across platforms and abstracts the particular platform implementations into a single, unified API.
  • Divergent Implementation – Invocation of specific platform features via divergent implementations via architectural tools such as interfaces and inheritance or conditional compilation.

Platform Abstraction

Class Abstraction

Using either interfaces or base classes defined in the shared code and implemented or extended in platform-specific projects. Writing and extending shared code with class abstractions is particularly suited to Portable Class Libraries because they have a limited subset of the framework available to them and cannot contain compiler directives to support platform-specific code branches.

Interfaces

Using interfaces allows you to implement platform-specific classes that can still be passed into your shared libraries to take advantage of common code.

The interface is defined in the shared code, and passed into the shared library as a parameter or property.

The platform-specific applications can then implement the interface and still take advantage of shared code to ‘process’ it.

Advantages

The implementation can contain platform-specific code and even reference platform-specific external libraries.

Disadvantages

Having to create and pass implementations into the shared code. If the interface is used deep within the shared code then it ends up being passed through multiple method parameters or otherwise pushed down through the call chain. If the shared code uses lots of different interfaces then they must all be created and set in the shared code somewhere.

Inheritance

The shared code could implement abstract or virtual classes that could be extended in one or more platform-specific projects. This is similar to using interfaces but with some behavior already implemented. There are different viewpoints on whether interfaces or inheritance are a better design choice: in particular because C# only allows single inheritance it can dictate the way your APIs can be designed going forward. Use inheritance with caution.

The advantages and disadvantages of interfaces apply equally to inheritance, with the additional advantage that the base class can contain some implementation code (perhaps an entire platform agnostic implementation that can be optionally extended).

Xamarin.Forms

See the Xamarin.Forms documentation.

Other Cross-Platform Libraries

These libraries also offer cross-platform functionality for C# developers:

Conditional Compilation

There are some situations where your shared code will still need to work differently on each platform, possibly accessing classes or features that behave differently. Conditional compilation works best with Shared Asset Projects, where the same source file is being referenced in multiple projects that have different symbols defined.

Xamarin projects always define __MOBILE__ which is true for both iOS and Android application projects (note the double-underscore pre- and post-fix on these symbols).

C#복사

#if __MOBILE__ // Xamarin iOS or Android-specific code #endif iOS

Xamarin.iOS defines __IOS__ which you can use to detect iOS devices.

C#복사

#if __IOS__ // iOS-specific code #endif

There are also Watch- and TV-specific symbols:

C#복사

#if __TVOS__ // tv-specific stuff #endif #if __WATCHOS__ // watch-specific stuff #endif Android

Code that should only be compiled into Xamarin.Android applications can use the following

C#복사

#if __ANDROID__ // Android-specific code #endif

Each API version also defines a new compiler directive, so code like this will let you add features if newer APIs are targeted. Each API level includes all the ‘lower’ level symbols. This feature is not really useful for supporting multiple platforms; typically the __ANDROID__ symbol will be sufficient.

C#복사

#if __ANDROID_11__ // code that should only run on Android 3.0 Honeycomb or newer #endif Mac

There is not currently a built-in symbol for Xamarin.Mac, but you can add your own in the Mac app project Options > Build > Compiler in the Define symbols box, or edit the .csproj file and add there (for example __MAC__)

XML복사

<PropertyGroup><DefineConstants>__MAC__;$(DefineConstants)</DefineConstants></PropertyGroup> Universal Windows Platform (UWP)

Use WINDOWS_UWP. There are no underscores surrounding the string like the Xamarin platform symbols.

C#복사

#if WINDOWS_UWP // UWP-specific code #endif Using Conditional Compilation

A simple case-study example of conditional compilation is setting the file location for the SQLite database file. The three platforms have slightly different requirements for specifying the file location:

  • iOS – Apple prefers non-user data to be placed in a specific location (the Library directory), but there is no system constant for this directory. Platform-specific code is required to build the correct path.
  • Android – The system path returned by Environment.SpecialFolder.Personal is an acceptable location to store the database file.
  • Windows Phone – The isolated storage mechanism does not allow a full path to be specified, just a relative path and filename.
  • Universal Windows Platform – Uses Windows.Storage APIs.

The following code uses conditional compilation to ensure the DatabaseFilePath is correct for each platform:

C#복사

public static string DatabaseFilePath { get { var filename = "TodoDatabase.db3"; #if SILVERLIGHT // Windows Phone 8 var path = filename; #else #if __ANDROID__ string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); ; #else #if __IOS__ // we need to put in /Library/ on iOS5.1 to meet Apple's iCloud terms // (they don't want non-user-generated data in Documents) string documentsPath = Environment.GetFolderPath (Environment.SpecialFolder.Personal); // Documents folder string libraryPath = Path.Combine (documentsPath, "..", "Library"); #else // UWP string libraryPath = Windows.Storage.ApplicationData.Current.LocalFolder.Path; #endif #endif var path = Path.Combine (libraryPath, filename); #endif return path; }

The result is a class that can be built and used on all platforms, placing the SQLite database file in a different location on each platform.

안녕하세요. 어이없이 회사에 출근해서 바이러스 박멸중이에요. 어제 피씨가 안된다는 연락을 받고 확인해보니 해당 부서의 피씨만 안되고 있더라구요.

일부피씨회수해서 확인해보니 야사,야동이 꽤 많이 발견되었네요. 그런거 보고 싶으면 집에가서보던가..나이 먹고 할짓 없어서 회사 피씨에다 그런 몹쓸짓을....
음란사이트 차단해놔도 새로운 사이트가 생겨놔서 사전에 막아놓는 것도 힘들더라구요..

그런건 어떻게들알고 귀신같이 찾아서 들어가는지..대단한것 같아요. 그런 열정으로 일을 더하지.. 쓰다보니 푸념이되었네요.

다행히 MZK라는 백신이 잘 잡아줘서 돌리고 있는데 시간이 너무 걸리네요.

역쉬 mzk!!이거 아니었으면 집에 못갈뻔했어요.
물론 저만 출근했고 사고친부서는 집에서 쉬고 있어요.
이상하게 딴짓하다 피씨문제생기면 전산담당 잘 못으로 몰아가니 그런 분위기가 더 힘들게 만들어요.
관리하랴 개발하랴 고쳐주랴...등등 관리와 개발은 인정하겠는데 딴짓 하다 고장낸 피씨까지 봐주기는..아오~열받아..

이상으로 백신 돌리면서 작성한 푸념포스팅을 마칠게요.

+ Recent posts