Xamarin Android 및 iOS의 Visual Basic

Download Sample 샘플 다운로드

TaskyVB 샘플 애플리케이션은 .NET Standard 라이브러리로 컴파일된 Visual Basic 코드를 Xamarin과 함께 사용하는 방법을 보여 줍니다. Android 및 iOS에서 실행되는 결과 앱의 몇 가지 스크린샷은 다음과 같습니다.

Android and iOS running an app built with Visual Basic

예제의 Android 및 iOS 프로젝트는 모두 C#으로 작성됩니다. 각 애플리케이션에 대한 사용자 인터페이스는 네이티브 기술로 빌드되는 반면 TodoItem , 관리는 전체 데이터베이스가 아닌 데모용으로 XML 파일을 사용하여 Visual Basic .NET Standard 라이브러리에서 제공됩니다.

샘플 연습

이 가이드에서는 iOS 및 Android용 TaskyVB Xamarin 샘플에서 Visual Basic이 구현된 방법을 설명합니다.

참고 항목

이 가이드를 계속 진행하기 전에 Visual Basic 및 .NET Standard에 대한 지침을 검토합니다.

Visual Basic 지침을 사용하여 Xamarin.Forms를 참조하여 공유 사용자 인터페이스 Visual Basic 코드를 사용하여 앱을 빌드하는 방법을 확인합니다.

VisualBasicNetStandard

Visual Basic .NET Standard 라이브러리는 Windows의 Visual Studio에서만 만들 수 있습니다. 예제 라이브러리에는 다음 Visual Basic 파일에서 애플리케이션의 기본 사항이 포함되어 있습니다.

  • TodoItem.vb
  • TodoItemManager.vb
  • TodoItemRepositoryXML.vb
  • XmlStorage.vb

TodoItem.vb

이 클래스는 애플리케이션 전체에서 사용할 비즈니스 개체를 포함합니다. Visual Basic에서 정의되고 C#으로 작성된 Android 및 iOS 프로젝트와 공유됩니다.

클래스 정의는 다음과 같습니다.

Public Class TodoItem
    Property ID() As Integer
    Property Name() As String
    Property Notes() As String
    Property Done() As Boolean
End Class

이 샘플에서는 XML serialization 및 de-serialization을 사용하여 TodoItem 개체를 로드하고 저장합니다.

TodoItemManager.vb

Manager 클래스는 이식 가능한 코드에 대한 'API'를 제공합니다. 클래스에 대한 TodoItem 기본 CRUD 작업을 제공하지만 해당 작업의 구현은 제공하지 않습니다.

Public Class TodoItemManager
    Private _repository As TodoItemRepositoryXML
    Public Sub New(filename As String)
        _repository = New TodoItemRepositoryXML(filename, storage)
    End Sub
    Public Function GetTask(id As Integer) As TodoItem
        Return _repository.GetTask(id)
    End Function
    Public Function GetTasks() As List(Of TodoItem)
        Return New List(Of TodoItem)(_repository.GetTasks())
    End Function
    Public Function SaveTask(item As TodoItem) As Integer
        Return _repository.SaveTask(item)
    End Function
    Public Function DeleteTask(item As TodoItem) As Integer
        Return _repository.DeleteTask(item.ID)
    End Function
End Class

생성자는 IXmlStorage 인스턴스를 매개 변수로 사용합니다. 이렇게 하면 각 플랫폼이 고유한 작업 구현을 제공하면서 이식 가능한 코드에서 공유할 수 있는 다른 기능을 설명하도록 할 수 있습니다.

TodoItemRepository.vb

리포지토리 클래스에는 TodoItem 개체 목록을 관리하기 위한 논리가 포함되어 있습니다. 전체 코드는 아래에 나와 있습니다. 컬렉션에서 추가 및 제거될 때 TodoItems에서 고유한 ID 값을 관리하기 위한 논리가 기본 존재합니다.

Public Class TodoItemRepositoryXML
    Private _filename As String
    Private _storage As IXmlStorage
    Private _tasks As List(Of TodoItem)

    ''' <summary>Constructor</summary>
    Public Sub New(filename As String)
        _filename = filename
        _storage = New XmlStorage
        _tasks = _storage.ReadXml(filename)
    End Sub
    ''' <summary>Inefficient search for a Task by ID</summary>
    Public Function GetTask(id As Integer) As TodoItem
        For t As Integer = 0 To _tasks.Count - 1
            If _tasks(t).ID = id Then
                Return _tasks(t)
            End If
        Next
        Return New TodoItem() With {.ID = id}
    End Function
    ''' <summary>List all the Tasks</summary>
    Public Function GetTasks() As IEnumerable(Of TodoItem)
        Return _tasks
    End Function
    ''' <summary>Save a Task to the Xml file
    ''' Calculates the ID as the max of existing IDs</summary>
    Public Function SaveTask(item As TodoItem) As Integer
        Dim max As Integer = 0
        If _tasks.Count > 0 Then
            max = _tasks.Max(Function(t As TodoItem) t.ID)
        End If
        If item.ID = 0 Then
            item.ID = ++max
            _tasks.Add(item)
        Else
            Dim j = _tasks.Where(Function(t) t.ID = item.ID).First()
            j = item
        End If
        _storage.WriteXml(_tasks, _filename)
        Return max
    End Function
    ''' <summary>Removes the task from the XMl file</summary>
    Public Function DeleteTask(id As Integer) As Integer
        For t As Integer = 0 To _tasks.Count - 1
            If _tasks(t).ID = id Then
                _tasks.RemoveAt(t)
                _storage.WriteXml(_tasks, _filename)
                Return 1
            End If
        Next
        Return -1
    End Function
End Class

참고 항목

이 코드는 매우 기본적인 데이터 스토리지 메커니즘의 예입니다. .NET Standard 라이브러리가 인터페이스에 대해 코딩하여 플랫폼별 기능에 액세스하는 방법을 보여 줍니다(이 경우 XML 파일 로드 및 저장). 프로덕션 품질 데이터베이스 대안이 아닙니다.

Android 및 iOS 애플리케이션 프로젝트

iOS

iOS 애플리케이션 TodoItemManager 에서 이 코드 조각과 XmlStorageImplementation 같이 AppDelegate.cs 파일에 생성됩니다. 처음 네 줄은 데이터가 저장될 파일의 경로를 작성하는 것입니다. 마지막 두 줄은 인스턴스화되는 두 클래스를 보여 줍니다.

var xmlFilename = "TodoList.xml";
string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); // Documents folder
string libraryPath = Path.Combine(documentsPath, "..", "Library"); // Library folder
var path = Path.Combine(libraryPath, xmlFilename);

TaskMgr = new TodoItemManager(path);

Android

Android 애플리케이션 TodoItemManager 에서 이 코드 조각과 XmlStorageImplementation 같이 Application.cs 파일에 생성됩니다. 처음 세 줄은 데이터가 저장될 파일의 경로를 작성하는 것입니다. 마지막 두 줄은 인스턴스화되는 두 클래스를 보여 줍니다.

var xmlFilename = "TodoList.xml";
string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var path = Path.Combine(libraryPath, xmlFilename);

TaskMgr = new TodoItemManager(path);

애플리케이션 코드의 나머지 부분에는 주로 사용자 인터페이스 및 클래스를 로드 하 고 저장 TodoItem 하는 클래스를 사용 하 여 TaskMgr 관련 됩니다.

Mac용 Visual Studio 2019

Warning

Mac용 Visual Studio Visual Basic 언어 편집을 지원하지 않습니다. Visual Basic 프로젝트 또는 파일을 만들기 위한 메뉴 항목이 없습니다. .vb면 언어 구문 강조 표시, 자동 완성 또는 IntelliSense가 없습니다.

Mac 용 Visual Studio 2019는 Windows에서 만든 Visual Studio .NET Standard 프로젝트를 컴파일할 수 있으므로 iOS 앱은 이러한 프로젝트를 참조할 수 있습니다.

Visual Studio 2017 은 Visual Basic 프로젝트를 전혀 빌드할 수 없습니다 .

요약

이 문서에서는 Visual Studio 및 .NET Standard 라이브러리를 사용하여 Xamarin 애플리케이션에서 Visual Basic 코드를 사용하는 방법을 보여 줍니다. Xamarin은 Visual Basic을 직접 지원하지 않지만 Visual Basic을 .NET Standard 라이브러리로 컴파일하면 Visual Basic으로 작성된 코드를 iOS 및 Android 앱에 포함할 수 있습니다.