Проблема при добавлении файла Swift в пакет ресурсов приложения - PullRequest
0 голосов
/ 29 мая 2018

Для моего приложения мне нужно иметь возможность отправлять электронные письма с различными типами вложений - прямо из приложения.Я нашел некоторые решения и протестировал их.

Если я попытался отправить файлы .zip или .txt из моего приложения, это работало нормально.Но я не смог отправить файл типа ".swift".Кто-нибудь знает, как это может работать?

Вот мой код:

import UIKit
import MessageUI

class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
    var EmailTxt = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        setEmailTxt()
        sendEmail()
        view.backgroundColor = UIColor.lightGray
    }

    func sendEmail() {
        if MFMailComposeViewController.canSendMail() {
            let mail = MFMailComposeViewController()
            mail.mailComposeDelegate = self
            mail.setToRecipients(["sgamesro@gmail.com"])
            mail.setMessageBody(EmailTxt, isHTML: true)
            mail.setSubject("test email")

            if let filePath = Bundle.main.path(forResource: "test", ofType: "swift") {
                print("# File path loaded.")

                if let fileData = NSData(contentsOfFile: filePath) {
                    print("File data loaded.")
                    mail.addAttachmentData(fileData as Data, mimeType: "swift", fileName: "test.swift")

                }
            }

            present(mail, animated: true)
        } else {
            // show failure alert
            print("# func sendEmail() Mistake")
        }
    }

    func setEmailTxt() {
        EmailTxt = "<p>test line 01</p> <p>test line 02</p>" //<p>This is some text in a paragraph.</p>
    }

    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
        controller.dismiss(animated: true)
    }
}

1 Ответ

0 голосов
/ 29 мая 2018

Здесь есть несколько вопросов.Xcode не любит помещать файлы .swift в комплект ресурсов.

Первое очевидное исправление - перейти к разделу «Копировать ресурсы комплекта» в разделе «Этапы сборки» для своей цели и добавить файл .swift.

Такого рода работы.Но он не копирует необработанный файл .swift, он копирует два связанных файла, связанных с скомпилированной версией файла .swift.

И, похоже, нет способа предотвратить компиляцию XcodeФайл Swift, даже если он не указан в разделе «Исходники компиляции» раздела «Этапы сборки».

Вот что я хотел бы сделать:

Переименуйте файл .swift, который вы хотите в своем приложении.связать с .swiftx для некоторого другого подобного расширения поля.Убедитесь, что файл находится в списке в разделе «Копировать ресурсы комплекта».

Затем обновите свой код до следующего вида:

if let fileURL = Bundle.main.url(forResource: "test", withExtension: "swiftx") {
    print("# File path loaded.")

    if let fileData = Data(contentsOf: fileURL) {
        print("File data loaded.")
        mail.addAttachmentData(fileData, mimeType: "text/plain", fileName: "test.swift")
    }
}
...