Como Ler e Escrever Código de Barras no iOS em .NET MAUI

This article was translated from English: Does it need improvement?
Translated
View the article in English
Ios related to Como Ler e Escrever Código de Barras no iOS em .NET MAUI

.NET MAUI (Multi-platform App UI) é construído sobre o Xamarin.Forms, proporcionando um framework unificado para o desenvolvimento de aplicações multiplataforma com .NET. Ele permite que desenvolvedores criem interfaces de usuário nativas que funcionam perfeitamente no Android, iOS, macOS e Windows, simplificando o processo de desenvolvimento de aplicativos.

O pacote BarCode.iOS traz suporte a código de barras para iOS!!

Pacote IronBarcode iOS

O pacote BarCode.iOS habilita funções de código de barras em dispositivos iOS via projetos cross-platform .NET. O pacote padrão BarCode não é necessário.

Install-Package BarCode.iOS
Biblioteca NuGet C# para PDF
### Instalar com NuGet
Install-Package BarCode.iOS

Criar um projeto .NET MAUI

Na seção Multiplataforma, selecione .NET MAUI App e continue.

Crie projeto de aplicativo .NET MAUI

Inclua a Biblioteca BarCode.iOS

A biblioteca pode ser adicionada de várias maneiras. A maneira mais fácil é talvez usando o NuGet.

  1. Dentro do Visual Studio, clique com o botão direito em "Dependencies > NuGet" e selecione "Manage NuGet Packages ...".
  2. Selecione a aba "Browse" e procure por "BarCode.iOS".
  3. Selecione o pacote "BarCode.iOS" e clique em "Adicionar Pacote".

Para evitar problemas com outras plataformas, modifique o arquivo csproj para incluir o pacote apenas ao direcionar para a plataforma iOS. Para fazer isso:

  1. Clique com o botão direito no arquivo *.csproj do seu projeto e selecione "Editar Arquivo do Projeto".
  2. Crie um novo elemento ItemGroup assim:
<ItemGroup Condition="$(TargetFramework.Contains('ios')) == true">
    <PackageReference Include="BarCode.iOS" Version="2025.3.4" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework.Contains('ios')) == true">
    <PackageReference Include="BarCode.iOS" Version="2025.3.4" />
</ItemGroup>
XML
  1. Mova o PackageReference "BarCode.iOS" para dentro do ItemGroup que acabamos de criar.

As etapas acima impedirão que o pacote "BarCode.iOS" seja usado em plataformas como Android. Para essa finalidade, instale BarCode.Android em vez disso.

Desenhar a Interface do App

Modifique o arquivo XAML para aceitar valores de entrada para gerar códigos de barras e códigos QR. Também inclua um botão para selecionar um documento para leitura de um código de barras. Segue abaixo um exemplo:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="IronBarcodeMauiIOS.MainPage">

    <VerticalStackLayout Padding="20">
        <HorizontalStackLayout>
            <CheckBox x:Name="generatePdfCheckBox" IsChecked="{Binding IsGeneratePdfChecked}" />
            <Label Text="PDF (unchecked for PNG)" VerticalOptions="Center"/>
        </HorizontalStackLayout>

        <Entry x:Name="barcodeInput" Placeholder="Enter barcode value..." />
        <Button Text="Generate and save barcode" Clicked="WriteBarcode" />

        <Entry x:Name="qrInput" Placeholder="Enter QR code value..." />
        <Button Text="Generate and save QR code" Clicked="WriteQRcode" />

        <Button
        Text="Read Barcode"
        Clicked="ReadBarcode"
        Grid.Row="0"
        HorizontalOptions="Center"
        Margin="20, 20, 20, 10"/>
        <ScrollView
        Grid.Row="1"
        BackgroundColor="LightGray"
        Padding="10"
        Margin="10, 10, 10, 30">
            <Label x:Name="OutputText"/>
        </ScrollView>
    </VerticalStackLayout>

</ContentPage>
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="IronBarcodeMauiIOS.MainPage">

    <VerticalStackLayout Padding="20">
        <HorizontalStackLayout>
            <CheckBox x:Name="generatePdfCheckBox" IsChecked="{Binding IsGeneratePdfChecked}" />
            <Label Text="PDF (unchecked for PNG)" VerticalOptions="Center"/>
        </HorizontalStackLayout>

        <Entry x:Name="barcodeInput" Placeholder="Enter barcode value..." />
        <Button Text="Generate and save barcode" Clicked="WriteBarcode" />

        <Entry x:Name="qrInput" Placeholder="Enter QR code value..." />
        <Button Text="Generate and save QR code" Clicked="WriteQRcode" />

        <Button
        Text="Read Barcode"
        Clicked="ReadBarcode"
        Grid.Row="0"
        HorizontalOptions="Center"
        Margin="20, 20, 20, 10"/>
        <ScrollView
        Grid.Row="1"
        BackgroundColor="LightGray"
        Padding="10"
        Margin="10, 10, 10, 30">
            <Label x:Name="OutputText"/>
        </ScrollView>
    </VerticalStackLayout>

</ContentPage>
XML

Ler e Escrever Códigos de Barras

Do código MainPage.xaml acima, podemos ver que a caixa de seleção determina se o código de barras e o código QR gerados devem estar no formato PDF. Em seguida, definimos a chave de licença. Por favor, use uma chave de licença de teste ou paga para esta etapa.

O código verifica e recupera o valor da variável barcodeInput, em seguida usa o método CreateBarcode para gerar o código de barras. Finalmente, ele chama o método SaveToDownloadsAsync, que salva o arquivo de maneira apropriada tanto para Android quanto para iOS.

No iOS, um caminho de arquivo personalizado é necessário para exportar o documento para o aplicativo Arquivos.

using IronBarCode;
namespace IronBarcodeMauiIOS;
public partial class MainPage : ContentPage
{
    public bool IsGeneratePdfChecked
    {
        get => generatePdfCheckBox.IsChecked;
        set
        {
            generatePdfCheckBox.IsChecked = value;
        }
    }
    public MainPage()
    {
        InitializeComponent();
        IronBarCode.License.LicenseKey = "IRONBARCODE-MYLICENSE-KEY-1EF01";
    }

    // Method to generate and save a barcode
    private async void WriteBarcode(object sender, EventArgs e)
    {
        try
        {
            if (!string.IsNullOrEmpty(barcodeInput.Text))
            {
                var barcode = BarcodeWriter.CreateBarcode(barcodeInput.Text, BarcodeEncoding.EAN13);
                // Determine file extension based on checkbox state
                string fileExtension = IsGeneratePdfChecked ? "pdf" : "png";
                string fileName = $"Barcode_{DateTime.Now:yyyyMMddHHmmss}.{fileExtension}";
                byte[] fileData = IsGeneratePdfChecked ? barcode.ToPdfBinaryData() : barcode.ToPngBinaryData();
                // Save the file to the appropriate location
                await SaveToDownloadsAsync(fileData, fileName);
            }
        }
        catch (Exception ex)
        {
            // Log exceptions to debug output
            System.Diagnostics.Debug.WriteLine(ex);
        }
    }

    // Method to generate and save a QR code
    private async void WriteQRcode(object sender, EventArgs e)
    {
        try
        {
            if (!string.IsNullOrEmpty(qrInput.Text))
            {
                var barcode = QRCodeWriter.CreateQrCode(qrInput.Text);
                // Determine file extension based on checkbox state
                string fileExtension = IsGeneratePdfChecked ? "pdf" : "png";
                string fileName = $"QRcode_{DateTime.Now:yyyyMMddHHmmss}.{fileExtension}";
                byte[] fileData = IsGeneratePdfChecked ? barcode.ToPdfBinaryData() : barcode.ToPngBinaryData();
                // Save the file to the appropriate location
                await SaveToDownloadsAsync(fileData, fileName);
            }
        }
        catch (Exception ex)
        {
            // Log exceptions to debug output
            System.Diagnostics.Debug.WriteLine(ex);
        }
    }

    // Method to read a barcode from a file
    private async void ReadBarcode(object sender, EventArgs e)
    {
        try
        {
            var options = new PickOptions
            {
                PickerTitle = "Please select a file"
            };
            var file = await FilePicker.PickAsync(options);
            OutputText.Text = "";
            if (file != null)
            {
                using var stream = await file.OpenReadAsync();
                BarcodeResults result;
                // Determine if the document is a PDF or an image
                if (file.ContentType.Contains("pdf"))
                {
                    result = BarcodeReader.ReadPdf(stream);
                }
                else
                {
                    result = BarcodeReader.Read(stream);
                }
                // Display the results
                string barcodeResult = "";
                int count = 1;
                result.ForEach(x => { barcodeResult += $"barcode {count}: {x.Value}\n"; count++; });
                OutputText.Text = barcodeResult;
            }
        }
        catch (Exception ex)
        {
            // Log exceptions to debug output
            System.Diagnostics.Debug.WriteLine(ex);
        }
    }

    // Method to save file data to the Downloads folder (or Documents on iOS)
    public async Task SaveToDownloadsAsync(byte[] fileData, string fileName)
    {
        // #if IOS
        // Define the custom path you want to save to
        var customPath = "/Users/Iron/Library/Developer/CoreSimulator/Devices/7D1F57F2-1103-46DA-AEE7-C8FC871502F5/data/Containers/Shared/AppGroup/37CD82C0-FCFC-45C7-94BB-FFEEF7BAFF13/File Provider Storage/Document";
        // Combine the custom path with the file name
        var filePath = Path.Combine(customPath, fileName);
        try
        {
            // Create the directory if it doesn't exist
            if (!Directory.Exists(customPath))
            {
                Directory.CreateDirectory(customPath);
            }
            // Save the file to the specified path
            await File.WriteAllBytesAsync(filePath, fileData);
            // Display a success message
            await Application.Current.MainPage.DisplayAlert("Saved", $"File saved to {filePath}", "OK");
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Error saving file: " + ex.Message);
        }
        // #endif
    }
}
using IronBarCode;
namespace IronBarcodeMauiIOS;
public partial class MainPage : ContentPage
{
    public bool IsGeneratePdfChecked
    {
        get => generatePdfCheckBox.IsChecked;
        set
        {
            generatePdfCheckBox.IsChecked = value;
        }
    }
    public MainPage()
    {
        InitializeComponent();
        IronBarCode.License.LicenseKey = "IRONBARCODE-MYLICENSE-KEY-1EF01";
    }

    // Method to generate and save a barcode
    private async void WriteBarcode(object sender, EventArgs e)
    {
        try
        {
            if (!string.IsNullOrEmpty(barcodeInput.Text))
            {
                var barcode = BarcodeWriter.CreateBarcode(barcodeInput.Text, BarcodeEncoding.EAN13);
                // Determine file extension based on checkbox state
                string fileExtension = IsGeneratePdfChecked ? "pdf" : "png";
                string fileName = $"Barcode_{DateTime.Now:yyyyMMddHHmmss}.{fileExtension}";
                byte[] fileData = IsGeneratePdfChecked ? barcode.ToPdfBinaryData() : barcode.ToPngBinaryData();
                // Save the file to the appropriate location
                await SaveToDownloadsAsync(fileData, fileName);
            }
        }
        catch (Exception ex)
        {
            // Log exceptions to debug output
            System.Diagnostics.Debug.WriteLine(ex);
        }
    }

    // Method to generate and save a QR code
    private async void WriteQRcode(object sender, EventArgs e)
    {
        try
        {
            if (!string.IsNullOrEmpty(qrInput.Text))
            {
                var barcode = QRCodeWriter.CreateQrCode(qrInput.Text);
                // Determine file extension based on checkbox state
                string fileExtension = IsGeneratePdfChecked ? "pdf" : "png";
                string fileName = $"QRcode_{DateTime.Now:yyyyMMddHHmmss}.{fileExtension}";
                byte[] fileData = IsGeneratePdfChecked ? barcode.ToPdfBinaryData() : barcode.ToPngBinaryData();
                // Save the file to the appropriate location
                await SaveToDownloadsAsync(fileData, fileName);
            }
        }
        catch (Exception ex)
        {
            // Log exceptions to debug output
            System.Diagnostics.Debug.WriteLine(ex);
        }
    }

    // Method to read a barcode from a file
    private async void ReadBarcode(object sender, EventArgs e)
    {
        try
        {
            var options = new PickOptions
            {
                PickerTitle = "Please select a file"
            };
            var file = await FilePicker.PickAsync(options);
            OutputText.Text = "";
            if (file != null)
            {
                using var stream = await file.OpenReadAsync();
                BarcodeResults result;
                // Determine if the document is a PDF or an image
                if (file.ContentType.Contains("pdf"))
                {
                    result = BarcodeReader.ReadPdf(stream);
                }
                else
                {
                    result = BarcodeReader.Read(stream);
                }
                // Display the results
                string barcodeResult = "";
                int count = 1;
                result.ForEach(x => { barcodeResult += $"barcode {count}: {x.Value}\n"; count++; });
                OutputText.Text = barcodeResult;
            }
        }
        catch (Exception ex)
        {
            // Log exceptions to debug output
            System.Diagnostics.Debug.WriteLine(ex);
        }
    }

    // Method to save file data to the Downloads folder (or Documents on iOS)
    public async Task SaveToDownloadsAsync(byte[] fileData, string fileName)
    {
        // #if IOS
        // Define the custom path you want to save to
        var customPath = "/Users/Iron/Library/Developer/CoreSimulator/Devices/7D1F57F2-1103-46DA-AEE7-C8FC871502F5/data/Containers/Shared/AppGroup/37CD82C0-FCFC-45C7-94BB-FFEEF7BAFF13/File Provider Storage/Document";
        // Combine the custom path with the file name
        var filePath = Path.Combine(customPath, fileName);
        try
        {
            // Create the directory if it doesn't exist
            if (!Directory.Exists(customPath))
            {
                Directory.CreateDirectory(customPath);
            }
            // Save the file to the specified path
            await File.WriteAllBytesAsync(filePath, fileData);
            // Display a success message
            await Application.Current.MainPage.DisplayAlert("Saved", $"File saved to {filePath}", "OK");
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Error saving file: " + ex.Message);
        }
        // #endif
    }
}
$vbLabelText   $csharpLabel

Por fim, altere o alvo de compilação para o iOS Simulator e execute o projeto.

Execute o projeto

Isso mostrará como executar o projeto e usar o recurso de código de barras.

Execute .NET MAUI App project

Baixar Projeto de App .NET MAUI

Você pode baixar o código completo deste guia. Ele está compactado em um arquivo zip que pode ser aberto no Visual Studio como um projeto de aplicativo .NET MAUI .

Clique aqui para baixar o projeto.

Perguntas frequentes

Como posso criar e ler códigos de barras no iOS usando C#?

Você pode usar o .NET MAUI com o pacote BarCode.iOS para criar e ler códigos de barras no iOS. Instale o pacote via NuGet, configure seu projeto e use os métodos fornecidos para gerar e ler códigos de barras.

Quais são os pré-requisitos para criar um aplicativo de leitura de código de barras em .NET MAUI?

Certifique-se de ter o Visual Studio com suporte a .NET MAUI instalado e acesso ao pacote BarCode.iOS via NuGet. A configuração incluirá a modificação do XAML para a interface do usuário e do C# para o processamento de códigos de barras.

Como faço para modificar o arquivo XAML da interface de usuário para leitura de código de barras no .NET MAUI?

No arquivo XAML, inclua campos de entrada para valores de código de barras, botões para operações com código de barras e rótulos para exibir os resultados, usando VerticalStackLayout e HorizontalStackLayout para o layout.

Qual método devo usar para gerar um código de barras em um aplicativo .NET MAUI?

Utilize o método WriteBarcode na classe MainPage para gerar códigos de barras, usando a classe BarcodeWriter e salvando os arquivos com SaveToDownloadsAsync .

Como posso solucionar problemas se o código de barras não estiver sendo reconhecido no meu aplicativo?

Certifique-se de que o arquivo de código de barras esteja selecionado corretamente e seja legível. Use o método ReadBarcode para selecionar e decodificar o código de barras, verificando se os caminhos e formatos dos arquivos estão corretos.

Qual a finalidade de configurar uma chave de licença no aplicativo de código de barras?

Configurar uma chave de licença em seu aplicativo garante que você tenha acesso a todas as funcionalidades da biblioteca de código de barras sem limitações, o que é crucial para ambientes de produção.

Como posso salvar um código de barras gerado como PDF ou PNG?

Utilize a propriedade IsGeneratePdfChecked para determinar o formato de saída. Se marcada, os códigos de barras serão salvos como PDFs; caso contrário, serão salvos como imagens PNG.

Qual é o processo para executar um projeto de código de barras MAUI .NET em um simulador iOS?

Após configurar seu projeto, selecione o simulador iOS como destino de implantação no Visual Studio e execute o projeto para testar a funcionalidade de código de barras no ambiente simulado.

Como posso baixar um projeto de exemplo para leitura de código de barras em .NET MAUI?

Um projeto de exemplo completo está disponível para download como um arquivo compactado, que pode ser aberto no Visual Studio para explorar os detalhes da implementação da leitura de código de barras no iOS.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Downloads 2,108,094 | Versão: 2026.3 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package BarCode
executar um exemplo Veja seu fio se transformar em um código de barras.