我正在准备一个支持OS X和iOS的pod.我的pod有自己的一些依赖项,它们在podspec文件中定义,所以我使用Podfile来管理我用来开发pod并运行测试的项目的依赖项.我正在使用CocoaPods 0.33.1.
我有四个目标:
MFDynamic.iOS (iOS静态库)MFDynamic.iOS.Tests (iOS测试包)MFDynamic.Mac (Mac框架)MFDynamic.Mac.Tests (Mac测试包)我想要的行为是这样的:
Kiwi/XCTest我的测试目标的依赖项.但是,无论我尝试过什么,我都无法编写一个可行的Podfile.运行pod install永远不会将CocoaPods的构建阶段添加到我的目标,也不会将适当的xcconfig文件添加到项目中.CocoaPods不会输出有关Podfile中任何错误的警告.
这是我最近的失败尝试:
target 'MFDynamic.iOS' do
platform :ios, '6.1'
podspec :path => '../MFDynamic.podspec'
end
target 'MFDynamic.Mac' do
platform :osx, '10.7'
podspec :path => '../MFDynamic.podspec'
end
target 'MFDynamic.iOS.Tests' do
platform :ios, '6.1'
pod 'Kiwi/XCTest', '~> 2.2.4'
end
target 'MFDynamic.Mac.Tests' do
platform :osx, '10.7'
pod 'Kiwi/XCTest', '~> 2.2.4'
end
Run Code Online (Sandbox Code Playgroud)
简化一点会产生相同的结果(即项目中没有集成):
target 'MFDynamic.iOS' do
platform :ios, '6.1'
pod 'AFNetworking', …Run Code Online (Sandbox Code Playgroud) 我在Cocoa项目中使用了一些Carbon代码来处理来自其他应用程序的全局键事件(快捷方式).目前我已经设置了一个kEventHotKeyReleased事件处理程序,当我的应用程序不活动时,我可以成功获取热键.这会在我的应用程序中触发一些操作
我的行为问题kEventHotKeyReleased是:
例如,我按下Cmd-Shift-P组合键.一旦我释放"P"键,就会触发热键事件.当所有键都未被按下时,我需要能够触发事件(或手动触发它)(即:Cmd和Shift键也被释放).
监控热键很容易,但我没有看到任何用于监控单个按键的信息.如果我可以监控修改键关键状态,我就会开展业务.
关于如何做到这一点的任何提示?
提前致谢!
更新:
我已经尝试过使用kEventRawKeyUp,kEventRawKeyModifiersChanged但是kEventHotKeyReleased尽管我将它们设置为完全相同的方式,但它们仍在使用kEventHotKeyReleased.
EventTypeSpec eventTypes[] = {{kEventClassKeyboard, kEventHotKeyReleased}, {kEventClassKeyboard, kEventRawKeyUp}};
// Changing the order in the list does not help, nor does removing kEventHotKeyReleased
OSStatus err = InstallApplicationEventHandler(&globalHotkeyHandler, GetEventTypeCount(eventTypes), eventTypes, NULL, NULL);
// err == noErr after this line
Run Code Online (Sandbox Code Playgroud)
要求该globalHotKeyHandler方法kEventHotKeyReleased,但kEventRawKeyUp由于某种原因我似乎无法掌握.这是我的globalHotKeyHandler方法的样子:
OSStatus globalHotkeyHandler(EventHandlerCallRef nextHandler, EventRef anEvent, void *userData) {
NSLog(@"Something happened!");
} …Run Code Online (Sandbox Code Playgroud) 我正在制作一个删除日志文件的小应用程序.我正在使用一个运行rm和srm(secure rm)的NSTask实例来删除文件.
我希望能够删除以下文件:
问题是用户帐户无权访问系统库文件夹中的某些文件,例如Adobe日志子文件夹和其他文件.例如,只有"system"用户(组?)对Adobe logs文件夹及其内容具有r/w权限,并且当前用户甚至没有在文件夹的"获取信息"窗口中显示的权限中的条目.
我希望能够完全做到:
我正在使用NSTask,因为它提供任务完成通知,从任务本身获取文本输出等.我需要使用其他东西吗?如果是这样,在运行具有管理员权限的rm和srm时,如何复制NSTask的完成通知和输出文件句柄?
我正在寻找最安全的方式来处理这种情况.即我不希望我的应用程序成为特权升级攻击的门户.
我查看了授权服务编程指南,但我不确定哪种情况适合.起初我认为这AuthorizationExecuteWithPrivileges是一个好主意,但在阅读了更多有关该主题的内容后,出于安全原因,不建议使用此方法.
非常欢迎详细的答案.我相信你们中的一些人已经不得不做类似的事情,并且需要分享一些代码和知识.
提前致谢!
更新:
我现在能够弹出身份验证对话框并获取权限,如下所示:
OSStatus status;
AuthorizationRef authRef;
status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authRef);
AuthorizationRights authRights;
AuthorizationItem authItems[1];
authItems[0].name = kAuthorizationRightExecute;
authRights.count = sizeof(authItems) / sizeof(authItems[0]);
authRights.items = authItems;
AuthorizationFlags authFlags = kAuthorizationFlagDefaults | kAuthorizationFlagExtendRights | kAuthorizationFlagInteractionAllowed;
status = AuthorizationCopyRights(authRef, &authRights, kAuthorizationEmptyEnvironment, authFlags, NULL);
Run Code Online (Sandbox Code Playgroud)
从它的外观来看,似乎"Factored Application"方法看起来最合适.问题是,对我而言,rm似乎已经成为一个外部辅助工具了.我不确定我是否获得了文档中建议的setuid替代方案.我可以在rm上设置setuid位并使用我已实现的NSTask方法运行它吗?这意味着我不需要创建自己的帮助工具.有人可以详细说明这个问题吗?
我还查看了BetterAuthorizationSample,它被建议作为setuid位方法的一种更安全和最新的替代方法,但发现它非常复杂,例如简单的行为.任何提示?
在此先感谢您的帮助!
我想制作一个看起来像这样的自定义窗口(不要介意快速的Photoshop):
alt text http://i35.tinypic.com/20ff803.png
我的主要问题是不要让窗口透明(虽然我猜任何信息都是受欢迎的!),但我希望能够只点击按钮的可见部分.例如,如果我点击只是"5"键的左上角外,我希望它的"1"按钮,而不是"5"的按钮点击,即使我在按钮5的边框点击.如果我点击"1"按钮的左上角""",我希望它点击窗口下方的任何内容而不是按钮上的内容.我还需要能够调整此窗口的大小,按钮中的图片应该随之调整大小.
我正在考虑使用透明的NSWindow,透明的NSButtons包含每个按钮的带有alpha的PNG,但我认为重叠按钮将是一个问题.
我也听说过Bowtie,SweetFM等应用程序以及其他使用WebKit显示其界面的应用程序.如果这是至少10.3的可能性,这将是有趣的,但我不知道这将如何工作.
我四处寻找点击面具,区域或类似的东西,但我还没有找到任何东西.我将更新这篇文章,因为我发现更多信息(如果我这样做!).
关于如何进行的任何提示?
(请注意,我正在使用10.4,理想情况下我也需要支持一些旧版本的Mac OS X.)
(另外,我在Apple的开发网站上找到了"圆形窗口"示例,但它不再在10.4上运行,所以我不确定这是不是可行的方法.)
提前致谢!
(见更新2,此问题现已修复)
好的,现在我的问题略有不同(但并非无关).到目前为止我做的是:
我选择制作一个自定义控件,我可以用于每个按钮:
1-子类NSControl并覆盖drawRect,mouseUp,mouseDragged和mouseDown.这样我可以在拖动按钮时移动我想要的行为(移动窗口).
2-将每个按钮状态(相同形状但一个变暗)的图像加载到NSImages中,并compositeToPoint:fromRect:operation:在必要时将它们绘制到视图中.这些图像是185 x 185像素的PNG文件,从Photoshop导出alpha.
3-获取NSImage的位图表示:
NSBitmapImageRep *bitRep = [[NSBitmapImageRep imageRepWithData:[unpressedImage TIFFRepresentation]] retain];
Run Code Online (Sandbox Code Playgroud)
要么
NSBitmapImageRep *bitRep = [[unpressedImage representations] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)
两者似乎都给出了相同的结果.我尝试将这个位图rep合成到我的窗口上以查看图像是否具有相同的大小并且看起来像原始图像并且一切看起来都很好(你会明白为什么我在这个枚举之后就这样做了......).
4-在鼠标事件方法中,我使用位图表示来获取特定点的alpha分量:
NSPoint mouse = [self convertPoint:[theEvent locationInWindow] fromView:nil]; // Returns the correct x and y positions on the control (i.e: between 0 and 185 for each axis).
NSColor *colorUnderMouse = [[[unpressedImage representations] …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,它使用存储在我的应用程序包的Resources/javascript文件夹中的.js文件.在我的Xcode 2.5项目中,我创建了一个文件夹引用(不是组)到我的javascript文件夹,它自动将文件夹添加到Copy Bundle Resources构建阶段.
我遇到的问题是当我修改我的.js文件时,我需要清理我的项目,然后为修改后的.js文件重新构建它,以便在构建时复制到我的应用程序包中.这是非常耗时的,因为我重新构建整个项目只是为了在我的应用程序包中获取更新的.js文件.
有人能告诉我如何让Xcode始终在构建阶段复制特定文件吗?
提前致谢!
我很快就会开发一个应用程序,它需要在最前面的应用程序窗口中获取当前选定的文本,无论是 Safari、Pages、TextEdit、Word 等,然后对这些文本做一些事情。
我的目标是找到一个可以与尽可能多的应用程序配合使用的解决方案。到目前为止,我考虑过使用AppleScript,但这会限制可以与我的服务一起使用的应用程序数量。至少必须支持这些常见的应用程序:Safari、Firefox(没有 AppleScript?)、Word、Pages、Excel、TextEdit,...
我还考虑将剪贴板的内容保存在一个临时变量中,然后模拟文本复制操作(Cmd-C),获取文本,然后将原始内容放回去。这可能会在复制操作时突出显示 Edit 菜单项是模拟的,对我来说似乎有点hacky。IMO 这个解决方案对于商业产品来说似乎不够好。
我还希望获得更多的选择(即:Safari 或 Word 中页面的完整内容等),以便在未来添加一些附加功能。
关于如何实现这种行为的任何想法/细节?
提前感谢您的任何提示!
注意:我需要至少支持 10.4 及更高版本,但最好也早于 10.4。
更新:
我选择的解决方案:使用“责任链”设计模式 (GOF) 结合 3 种不同的输入方法(粘贴板、AppleScript 和辅助功能),自动使用最佳可用输入源。
请注意,当使用 NSAppleScript 的 executeAndReturnError: 方法返回一个 NSAppleEventDescriptor(让我们说一个“描述符”实例)时,[descriptor stringValue] 方法返回一些东西,在你的 AppleScript 中,你必须使用“return someString” OUTSIDE“tell”块否则什么都不会返回。
我已经制作了一个非常简单的AppleScript来关闭Safari中的标签.问题是,它有效,但不完全.只关闭了几个标签.这是代码:
tell application "Safari"
repeat with aWindow in windows
repeat with aTab in tabs of aWindow
if [some condition is encountered] then
aTab close
end if
end repeat
end repeat
end tell
Run Code Online (Sandbox Code Playgroud)
我也试过这个脚本:
tell application "Safari"
repeat with i from 0 to the number of items in windows
set aWindow to item i of windows
repeat with j from 0 to the number of tabs in aWindow
set aTab to item j of tabs of aWindow
if [some …Run Code Online (Sandbox Code Playgroud) 获取活动应用程序不是问题,我已经实现了这一点.
我想知道的是如何将"Cmd-C"组合键发送到活动应用程序,以便将所选文本放入剪贴板(常规粘贴板).
甚至更好:如何告诉活动应用程序在不发送击键的情况下执行复制操作,或者在触发复制操作时不突出显示"编辑"菜单.
我不能使用NSAppleScript(10.2),因为这个特定的类必须尽可能向后兼容(理想情况下低至10.0).
我看过NSAppleEvents(这似乎是要走的路),但似乎找不到办法做到这一点.非常欢迎具体的答案!
提前致谢!
更新:
Rob的NSAppleScript解决方案可以解决,但我仍然有兴趣在不需要NSAppleScript的情况下这样做.我已经尝试使用CGPostKeyboardEvent(使用最后一个布尔值将键设置为"向上"或"向下"状态)但我似乎无法找到键代码或任何字符代码表.有人可以准确地用CGPostKeyboardEvent来键入"c"吗?(CGCharCode和CGKeyCode表将是完美的).
cocoa ×5
objective-c ×5
appleevents ×1
applescript ×1
cocoapods ×1
ios ×1
iphone ×1
keychain ×1
macos ×1
macos-carbon ×1
nstask ×1
nswindow ×1
privileges ×1
safari ×1
scripting ×1
xcode ×1
xcodebuild ×1