Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 7

12
votes
answers
38 views
+10

iOS - watchOS App发布问题CFBundleIdentifier冲突

应用上传后,我收到以下电子邮件

我们发现了您的应用最近发送的一个或多个问题,XXX。请更正以下问题,然后重新上传。

ITMS-90806:CFBundleIdentifier冲突 - 每个捆绑包必须具有唯一的捆绑包标识符。包标识符'org.cocoapods.CocoaLumberjack'在包中使用[CocoaLumberjack.framework,CocoaLumberjack.framework]'

CocoaLumberjack是我已经用过的第三方库过去很多次没有任何问题,我很困惑。

它与框架的.plist关键字CFBundlePackageType无关,因为它在此问题/答案中指定CocoaLumberjack / Swift','?> 3.5.3'...结束

iOS应用正在使用该库,watchOS扩展使用相同的库。他们正在使用不同的库,但CocoaLumberjack是两者中唯一存在的库。

我过去已经多次发布我的应用程序而没有相同库配置的任何问题。我猜Apple在最近几天改变了对包标识符的一些限制 我过去已经多次发布我的应用程序而没有相同库配置的任何问题。我猜Apple在最近几天改变了对包标识符的一些限制 我过去已经多次发布我的应用程序而没有相同库配置的任何问题。我猜Apple在最近几天改变了对包标识符的一些限制

+60

显然Apple改变了验证过程。看起来他们不允许应用程序中的平台特定框架具有相同的标识符。

论坛上也有关于此的帖子: https://forums.developer.apple.com/thread/122048

如果你遇到这个问题因为您正在使用Cocoapods,您可以修补Podfile以将平台名称附加到包标识符,以便它们始终是唯一的( source ):

  post_install do | installer | installer.pods_project.targets。每个人都做|目标| target.build_configurations.each do | config | config.build_settings ['PRODUCT_BUNDLE_IDENTIFIER'] ='org.cocoapods。$ {PRODUCT_NAME:rfc1034identifier}  -  $(PLATFORM_NAME)'end end end   

如果您的应用中有多个目标,则可以在XCode中更改方案中的watchOS目标,并将 .watchos 附加到标识符。

我在Apple论坛上打开了这个帖子:我仍然试图了解哪个是这个问题的最佳解决方案,同时关于更改捆绑名称的解决方法看起来不错 - cristallo 8月30日13:11

请注意重命名所有pods包标识符,因为否则某些pod不正常。即:有些人一直遇到Firebase的问题,问题是该脚本已重命名其捆绑。我建议只重命名被Apple拒绝的那些。 - cristallo 18小时前

Apple刚刚批准了我的应用程序更新,该更新使用了我的答案中描述的技术。 - Tieme 18小时前

我并不是说这是错的,因为这是处理这个问题的方法:-) ...只要注意它不能适用于每个库。 - cristallo 17小时前

板凳
+60
+50

作为一种临时解决方法,我在watchOS扩展中手动重命名了bundle标识符,然后app发布工作正常,但它看起来不是一个好的解决方案,特别是如果你在CI系统上运行构建。

更好的选择是在pod文件中添加特定的安装后操作:

  post_install do | installer | installer.pods_project.targets.each do | target | if target.name =='CocoaLumberjack-watchOS'target.build_configurations.each do | config | config.build_settings ['PRODUCT_BUNDLE_IDENTIFIER'] ='org.cocoapods。$ {PRODUCT_NAME:rfc1034identifier}  -  $(PLATFORM_NAME)'end end end end   

目前有2个关于此问题的开放主题:

-20

只需从您的扩展程序中移除嵌入式框架构建阶段。

点击目标部分中的扩展程序 - > 构建阶段 - > 删除嵌入式窗格框架

参见附图:

如果我删除嵌入框架操作然后扩展应用程序不再工作,因为它不能再找到库 - cristallo 8月30日9:44

0
votes
answers
53 views
+10

通過檢查像SKStoreProductParameterAffiliateToken這樣的常量的地址來完成什麼?

3

我從我正在使用的庫中獲取該代碼。通過檢查像SKStoreProductParameterAffiliateToken這樣的常量的地址來完成什麼?

#ifdef __IPHONE_8_0 
    if (&SKStoreProductParameterAffiliateToken) { 
     if (self.affiliateToken) { 
      [appParameters setObject:self.affiliateToken forKey:SKStoreProductParameterAffiliateToken]; 
      if (self.campaignToken) { 
       [appParameters setObject:self.campaignToken forKey:SKStoreProductParameterCampaignToken]; 
      } 
     } 
    } 
#endif 

Xcode是說第一行總是會被評估爲true,但是這條線究竟是做什麼的?我從來沒有看到一個if&,並以這種方式常數。

SKStoreProductParameterAffiliateToken被定義爲

SK_EXTERN NSString * const SKStoreProductParameterAffiliateToken NS_AVAILABLE_IOS(8_0); 

什麼是開發嘗試檢查,恆定的地址?他是否試圖檢查iOS的版本是否具有此常量定義,並且通過這樣做,他試圖檢查if中是否應該運行?但他已經有ifdef __IPHONE_8_0 ...(?? !!)

我不明白這一點。

無論如何,我正在編譯的iOS 9.3,所以我可以刪除ififdef,對不對?

+0

至少運行'SKStoreProductParameterAffiliateToken'在IOS 8.0加入。如果你不需要支持iOS 7,那麼你可以刪除'#ifdef'和'if'。 – rmaddy

沙发
0
3

這是一個檢查,看是否有弱鏈接符號是可用的。如果包含該符號的庫/框架已被弱連接並且不可用,則其地址將評估爲NULL並且if條件將是錯誤的。

請參閱使用Apple的Using SDK-Based Development中的弱連接方法,函數和符號瞭解完整詳細信息。

板凳
0
0

#ifdef __IPHONE_8_0檢查的Xcode裏面應該編譯代碼。較舊版本的Xcode將顯示有關未知變量SKStoreProductParameterAffiliateToken的錯誤。

但是,使用新版本的Xcode(與iOS SDK 8+)的時候,我們可能仍然可以爲我們的項目設置一個較低的最低目標。在這種情況下,爲了避免iOS8以下版本的設備發生崩潰,我們應該首先檢查是否存在變量,類,方法或函數。

在你的情況,我們正在檢查,如果指針SKStoreProductParameterAffiliateTokenNULL,這意味着應用程序是目前在iOS 8

0
votes
answers
55 views
+10

取消選擇NSTextField中的文本

1

有沒有簡單的方法取消選擇 按回車?取消選擇NSTextField中的文本

沙发
0
1

首先,您需要將視圖控制器設置爲文本字段的代表。然後,您可以覆蓋NSControl實例方法controlTextDidEndEditing(_:),讓你的文本框當前編輯器中選擇範圍 並從主線程設置回您的文本字段:

import Cocoa 

class ViewController: NSViewController, NSTextFieldDelegate { 
    @IBOutlet weak var textField: NSTextField! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     textField.delegate = self 
    } 
    override func controlTextDidEndEditing(_ obj: Notification) { 
     if let selectedRange = textField.currentEditor()?.selectedRange { 
      DispatchQueue.main.async { 
       self.textField.currentEditor()?.selectedRange = selectedRange 
      } 
     } 
    } 
} 
+0

它取消textfiled但什麼即時尋找是,取消選擇文本並保持文本選擇無論是在 –

+0

bassicly即時尋找一種方式來阻止自動選擇所有文字textfiled按下回車鍵時 –

+0

@jana_lemmings檢查我的最後一次編輯 –

0
votes
answers
53 views
+10

高Sierra內的NSOutlineViewDelegate無法正常工作

-1

我是一名學習Swift和xcode的新手,通過重寫最初在Javascript/PHP/MySql中開發的代碼。我在macOS工作,使用xcode中的故事板作爲我的開發基礎。目前我正在開發SplitView。在主方我有一個OutlineView。它有三個層次,外層是可擴展的,直到今天,它工作得很好。適當時,所有級別都已填充,可見並可擴展。就我所知,我有Swift(4.0)和xcode(9.1)。所以,今天我決定是時候從塞拉利昂更新到高山。我的主視圖現在已完全空白。納達。我試圖跟蹤問題並發現,使用xcode中的調試器,顯然,我的MasterViewController的NSOutlineViewDelegate擴展中的outlineView函數顯然根本沒有被調用!我檢查了Connections Inspector,並且與DataSource和Delegate的連接仍然完好無損。我在網上搜索,發現幾個人似乎與Cocoa綁定相關的近期問題隱約相關,但是我無法將他們的問題解決方案連接到我的,因爲我沒有使用Cocoa綁定...它在我的列表中,但是我還沒有。我所知道的唯一變化就是從Sierra到High Sierra。有什麼建議麼?謝謝!高Sierra內的NSOutlineViewDelegate無法正常工作

增加:我現在知道更多關於這個問題。

下面是前高塞拉利昂工作代碼:

類的ViewController:NSViewController {

@IBOutlet弱VAR web視圖:WebView中!

@IBOutlet weak var outlineView:NSOutlineView!

變種饋送=訂閱

讓dateFormatter = DateFormatter()

倍率FUNC viewDidLoad中(){

super.viewDidLoad() 

dateFormatter.dateStyle = .short 

if let filePath = Bundle.main.path(forResource: "Feeds", ofType: "plist") { 
    feeds = Feed.feedList(filePath) 
    print(feeds) 
} 

}

該代碼是從一個教程採取的OutlineView在Ray_Wenderlich.com網站上。在此之後,我對代碼進行了圖案化,並且教程和代碼都工作了......直到高Sierra。顯然,在高Sierra之後,系統會自動解析「feeds」並生成outlineView顯示。隨着高山脈的行爲改變,它不再自發地產生outlineView,無論是在教程還是我的項目。結果是一個空白的outLineView。

在加入教程評論,我現在發現別人也遇到了同樣的行爲,並建議代碼現在需要:

outlineView.reloadData(),

但我天真的實施該建議只是產生一個運行時錯誤,

「[一個NSView reloadData]:無法識別的選擇發送到實例」

+2

請格式化您的問題,看起來很難看 –

+2

顯示您的工作。除非你需要英語作文課的幫助,否則「不工作」不適用於除你之外的任何人。 –

+0

同意@ElTomato –

沙发
0
0

只要確保當你開始一個新的「遊樂場」你有MacOS的作爲申請檢查而不是IOS。如果你有IOS檢查,Swift會導入UIKit(而不是Cocoa),這會導致你的問題。 GL。

0
votes
answers
54 views
+10

Cocoapods部署目標問題

0

我正在使用cocoapods將Google地圖更新到更新的版本2.5.0。在pod文件中使用pod'GoogleMaps','?> 2.5.0',但是當我安裝它時會給我提到的錯誤。Cocoapods部署目標問題

enter image description here

沙发
0
1

有兩個你其他圖書館的谷歌地圖庫的依賴。這些是谷歌地圖,谷歌地圖/地圖。這就是爲什麼它無法更新它。更新所有與谷歌地圖相關的庫將解決您的問題。

使用pod update更新所有庫

+0

感謝您的回覆。 – Imran

+0

該解決方案是否有效? –

+0

絕對是在Google地圖和Google地圖的更新版本之後有效。 – Imran

0
votes
answers
63 views
+10

無法歸檔XCode中反應本地項目,帶豆莢的臨時配置

1
  • 反應母語:0.50.3
  • 的Xcode 9.1(9B55)

我有3個配置:無法歸檔XCode中反應本地項目,帶豆莢的臨時配置

  1. 默認
  2. 舞臺
  3. 生產

1和3產品>存檔工作正常。當我嘗試存檔Stage時,出現錯誤:

ld: library not found for -lPods-carrier_mobile_app 

在我的項目中添加Pod之後出現此錯誤。 Podfile看起來像

platform :ios, '8.0' 

target 'carrier_mobile_app' do 
    # Pods for carrier_mobile_app 
    pod 'RSKImageCropper' 
    pod 'QBImagePickerController' 
end 

我想我應該配置Pods for Stage配置正確。有任何想法嗎?

沙发
0
-1

參照此位置:https://medium.com/@guyeldar/setting-up-multiple-build-configurations-for-your-xcode-project-c237265e8324

理論上增加$(BUILD_DIR)/釋放$(EFFECTIVE_PLATFORM_NAME)到你的頭,你的目標框架,和庫搜索路徑會工作。然而,它只爲我工作了一次,然後我不小心改變了一些東西,從那以後它一直沒有工作。不過值得一試。

0
votes
answers
56 views
+10

努力蒙上了NSSsearchfiled在迅速的Xcode

-5

我試圖調用一個函數多數民衆贊成在另一個類努力蒙上了NSSsearchfiled在迅速的Xcode

但它告訴我,我在想念一個參數

這個代碼是關於我的Class1

@IBAction func nssearchfiled(_ sender: Any) { 

    class2().functionforsearchfield() 
} 

其說 缺少的參數#1的參數呼叫

更新:

繼承人在我的班級數的代碼2

import Cocoa 

class class2{ 



func functionforsearchfield() { 

    print("works") 

} 
+2

你可以顯示functionforsearchfield的代碼(或者至少是聲明)嗎?也不清楚,是class2 - 一個變量,或者你在調用該函數之前實例化class2? – Jeepston

+3

您需要發佈您的class2代碼,但是您寫的代碼幾乎肯定是錯的:您正在創建一個實例,然後在其上運行一個方法,而沒有任何類型的返回值,然後讓實例立即死亡。這並沒有通過良好的編碼習慣的氣味測試。你想做什麼? –

+0

我更新了我的帖子並添加了我的class2代碼 –

沙发
0
-1

好吧我想出如何,繼承人如何我做到了

class1的

@IBAction func nssearchfiled(_ sender: Any) { 
    class2().functionforsearchfield((nssearchfiled)!) 
} 

類class2

類EnterPressedInRoomBarxxx {

func functionforsearchfield(_ nsearchfildpassed: NSSearchField) { 
    let newdata = nsearchfildpassed as NSSearchField 
} 

} 
+2

在你的問題中,你會看到'func functionforsearchfield()',我們發現它顯然需要*無參數*。這就是爲什麼錯誤信息不匹配,您的問題無法解答。然後在你的回答中告訴我們,解決方案是在調用它時添加一個參數,而且這個參數本身就是另一種方法。這是無稽之談,因爲它回答了與問題中不同的代碼。 100%無用。 – Moritz

+0

lol moritz ahahahah –

+0

moritz我問的是真的很容易理解 –

0
votes
answers
53 views
+10

macOS窗口邊框尺寸

0

獲取NSWindow邊框尺寸的度量標準的首選方法是什麼?基本上我需要找出像素窗口邊框有多厚。macOS窗口邊框尺寸

我最近發現自己需要這樣做,但各種解決方案似乎已經相當過時(即Carbon和HITheme)。

沙发
0
2

基本上,您使用的這些NSWindow方法之一,從內容矩形轉換爲框架矩形或反之亦然,然後比較兩個矩形:

+contentRectForFrameRect:styleMask: 
+frameRectForContentRect:styleMask: 
-contentRectForFrameRect: 
-frameRectForContentRect: 

,如果你沒有,你使用類方法有一個特定的窗口來衡量,或者如果你想忽略工具欄的存在。

對於現在的年齡來說,除了頂部(標題欄)之外,窗口上的任何位置都沒有「邊框」。

+0

非常感謝。我正在推翻這一個。 (無邊界部分是有意義的,因爲我在這裏移植了一些非常古老的代碼。) –

0
votes
answers
57 views
+10

CGImage.cropping(to :)在OS X上翻轉

1

我發現CGImage.cropping(to:)將使用左上角的原點(增加Y向下)而不是左下角(隨着Y向上增加)處理指定的矩形, 。這是特別奇怪的,因爲CGImage默認情況下不是這樣定向的,因爲在應用掩碼時情況並非如此。請注意,這與UIImage和方向無關 - 這是OS X特定的。CGImage.cropping(to :)在OS X上翻轉

我將此作爲一個問題提交,但這更多的是一個觀察。 Core Graphics上的Stack Overflow上的iOS中有更多的信息比OS X更多,Apple的裁剪文檔沒有解釋這一點。

下面是繪製圖像右下象限的代碼,而期望它繪製右上象限。

func getImage(_ url: CFURL) -> CGImage? { 
    guard let imageSource = CGImageSourceCreateWithURL(url, nil) else { return nil } 

    guard let image = CGImageSourceCreateImageAtIndex(imageSource, 0, nil) else { 
     let imageSourceStatus = CGImageSourceGetStatus(imageSource) 
     Swift.print("image nil, Image Source Status = (imageSourceStatus)") 
     return nil 
    } 
    return image 
} 

func northeastQuadrant(fromImage: CGImage) -> CGRect { 
    let w = CGFloat(fromImage.width) 
    let h = CGFloat(fromImage.height) 
    let bottomleft = CGPoint(x: w/2.0, y: h/2.0) 
    return CGRect(x: bottomleft.x, y: bottomleft.y, width: w/2.0, height: h/2.0) 
} 

func southwestQuadrant(fromImage: CGImage) -> CGRect { 
    let w = CGFloat(fromImage.width) 
    let h = CGFloat(fromImage.height) 
    return CGRect(x: 0, y: 0, width: w/2.0, height: h/2.0) 
} 

class CGImageView: NSView { 
    func setImage() { 
     let url = CFURLCreateWithString(nil, "file:////Users/erickampman/Documents/FractIFS/Demonic%20Scarecrows.tiff" as CFString, nil) 

     let img = getImage(url!) 
     let quad = northeastQuadrant(fromImage: img!) 
//  let quad = southwestQuadrant(fromImage: img!) 
     image = img!.cropping(to: quad) 
    } 

    override func draw(_ dirtyRect: NSRect) { 
     if nil == image { 
      Swift.print("Calling setImage") 
      setImage() 
     } 

     guard let image = self.image else { 
      Swift.print("Nil image!") 
      return 
     } 
     super.draw(dirtyRect) 
     guard let cgContext = NSGraphicsContext.current?.cgContext else { return } 
     Swift.print("ctx transform: (cgContext.ctm)") 
     cgContext.saveGState(); 
     cgContext.draw(image, in: self.bounds, byTiling: false) 
     cgContext.restoreGState(); 
    } 

    var image: CGImage? 
} 
沙发
0
1

如何計算像素的doc for croppingToRect:會談:

  • 矩形是然後用其原產地是(0,0)的矩形相交...
  • 所產生的矩形內的像素處理矩形內的第一個像素...

如果W和H是成像的寬度和高度e,那麼點(0,0)對應於圖像數據的第一個像素。點(W-1,0)是最後一個像素...

所以看起來子圖像是在一種「柵格座標空間」中計算的,而不是使用與任何其他座標空間相對應的座標空間元件。

0
votes
answers
58 views
+10

如何在macOS應用程序中使NSButton具有突出顯示的邊框?

0

我想給NSButton一個突出顯示的邊框來引導用戶點擊它。我期望它與在NSTextField上使用becomeFirstResponder()的效果類似。如何在macOS應用程序中使NSButton具有突出顯示的邊框?

enter image description here

我試圖在NSButton使用becomeFirstResponder(),但沒有UI的變化。

我也嘗試使用button.highlight(true),但它突出顯示了整個按鈕,點擊時有點令人困惑。

我該怎麼辦?謝謝。

+0

您的意思是像是在System Prefs中打開Full Keyboard Access嗎? – Willeke

+0

@Willeke對不起,我不確定Full Keyboard Access在系統首選項中是什麼。這是捷徑嗎? –

+0

這簡直是個壞主意。 –

沙发
0
1

正如評論家指出,你提出的建議是不明智的,因爲它會與全鍵盤訪問相沖突,而你的一些用戶可能已經啓用了。

現在已經有一個macOS慣例以某種方式突出顯示「默認」按鈕 - 它以前在按鈕周圍添加了一個環,目前它以不同的顏色繪製按鈕。當用戶按下返回鍵時將觸發默認按鈕(而在全鍵盤訪問中,空格鍵是觸發器)。

您可以使用NSWindowdefaultButtonCell屬性動態設置和更改默認按鈕。請注意,這需要NSButtonCell而不是NSButton,您可以使用cell屬性從後者獲得前者。所以,你的代碼來設置默認會看起來像:

myWindow.defaultButtonCell = oneOfMyButtons.cell; 

遵循這一標準的MacOS的GUI這裏既指用戶最常用的按鈕按下,並允許他們使用返回鍵鍵盤觸發它。

HTH